亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

python進階

廖雪峰 移動開發工程師
難度中級
時長 3小時33分
學習人數
綜合評分9.20
575人評價 查看評價
9.6 內容實用
9.0 簡潔易懂
9.0 邏輯清晰
  • 帶參數的decorator

    查看全部
  • 像這種內層函數引用了外層函數的變量(參數也算變量),然后返回內層函數的情況,稱為閉包(Closure)。

    閉包的特點是返回的函數還引用了外層函數的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數返回后不能變

    查看全部
    0 采集 收起 來源:python中閉包

    2020-07-09

  • filter()函數是?Python?內置的另一個有用的高階函數,filter()函數接收一個函數 f?和一個list,這個函數?f?的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

    例如,要從一個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫一個判斷奇數的函數:

    def?is_odd(x):
    ????return?x?%?2?==?1

    然后,利用filter()過濾掉偶數:

    filter(is_odd,?[1,?4,?6,?7,?9,?12,?17])

    結果:[1, 7, 9, 17]

    注意:?s.strip(rm) 刪除 s 字符串中開頭、結尾處的 rm 序列的字符。

    當rm為空時,默認刪除空白符(包括'\n', '\r', '\t', ' '),如下:

    a?=?'?????123'
    a.strip()

    結果:?'123'

    a='\t\t123\r\n'
    a.strip()


    查看全部
  • reduce 函數

    reduce()函數也是Python內置的一個高階函數。reduce()函數接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f,并返回最終結果值。

    例如,編寫一個f函數,接收x和y,返回x和y的和:

    def?f(x,?y):
    ????return?x?+?y

    調用?reduce(f, [1, 3, 5, 7, 9])時,reduce函數將做如下計算:

    先計算頭兩個元素:f(1,?3),結果為4;
    再把結果和第3個元素計算:f(4,?5),結果為9;
    再把結果和第4個元素計算:f(9,?7),結果為16;
    再把結果和第5個元素計算:f(16,?9),結果為25;
    由于沒有更多的元素了,計算結束,返回結果25。


    查看全部
  • map()是 Python 內置的高階函數,它接收一個函數 f?和一個?list,并通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 并返回。

    def?f(x):
    ????return?x*x
    print?map(f,?[1,?2,?3,?4,?5,?6,?7,?8,?9])
    [1,?4,?9,?10,?25,?36,?49,?64,?81]


    查看全部
  • 請編寫一個函數calc_prod(lst),它接收一個list,返回一個函數,返回函數可以計算參數的乘積。

    • 先定義能計算乘積的函數,再將此函數返回。

      參考代碼:

      def?calc_prod(lst):
      ????def?lazy_prod():
      ????????def?f(x,?y):
      ????????????return?x?*?y
      ????????return?reduce(f,?lst,?1)
      ????return?lazy_prod
      f?=?calc_prod([1,?2,?3,?4])
      print?f()


    查看全部
  • 對字符串排序時,有時候忽略大小寫排序更符合習慣。請利用sorted()高階函數,實現忽略大小寫排序的算法。

    輸入:['bob', 'about', 'Zoo', 'Credit']
    輸出:['about', 'bob', 'Credit', 'Zoo']

    對于比較函數cmp_ignore_case(s1, s2),要忽略大小寫比較,就是先把兩個字符串都變成大寫(或者都變成小寫),再比較。

    def cmp_ignore_case(s1, s2):

    ? ? x = s1.upper()

    ? ? y = s2.upper()

    ? ? if x > y:

    ? ? ? ? return 1

    ? ? if x < y:

    ? ? ? ? return -1

    ? ? return 0

    print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)


    查看全部
  • 請利用filter()過濾出1~100中平方根是整數的數,即結果應該是:

    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    • filter()?接收的函數必須判斷出一個數的平方根是否是整數,而?math.sqrt()返回結果是浮點數。

      參考代碼:

      import?math
      def?is_sqr(x):
      ????r?=?int(math.sqrt(x))
      ????return?r*r==x
      print?filter(is_sqr,?range(1,?101))


    查看全部
  • Python內置了求和函數sum(),但沒有求積的函數,請利用recude()來求積:

    輸入:[2, 4, 5, 7, 12]
    輸出:2*4*5*7*12的結果

    • reduce()接收的函數f需要兩個參數,并返回一個結果,以便繼續進行下一輪計算。

      參考代碼:

      def?prod(x,?y):
      ????return?x?*?y
      print?reduce(prod,?[2,?4,?5,?7,?12])


    查看全部
  • 假設用戶輸入的英文名字不規范,沒有按照首字母大寫,后續字母小寫的規則,請利用map()函數,把一個list(包含若干不規范的英文名字)變成一個包含規范英文名字的list:

    輸入:['adam', 'LISA', 'barT']
    輸出:['Adam', 'Lisa', 'Bart']

    format_name(s)函數接收一個字符串,并且要返回格式化后的字符串,利用map()函數,就可以輸出新的list。

    參考代碼1:

    def?format_name(s):
    ????return?s[0].upper()?+?s[1:].lower()
    print?map(format_name,?['adam',?'LISA',?'barT'])

    參考代碼2:

    def format_name(s):

    ? ? return s.title()

    print map(format_name, ['adam', 'LISA', 'barT'])


    upper()//把所有字符中的小寫字母轉換成大寫

    lower()//把所有字符中的大寫字母轉換成小寫

    capitalize()//把第一個字母轉換成大寫字母,其余小寫

    title()//把每個單詞的第一個字母轉換成大寫,其余小寫

    查看全部
  • 利用add(x,y,f)函數,計算:

    54c8a43b00013a9900930027.png

    • 計算平方根可以用函數:

      >>>?math.sqrt(2)
      1.4142...

      參考代碼:

      import?math
      def?add(x,?y,?f):
      ????return?f(x)?+?f(y)
      print?add(25,?9,?math.sqrt)


    查看全部
  • 無參數 decorator:接收一個函數作為參數返回一個新函數

    使用decoraror用@語法

    log一般只能用于一個參數如果要想log用于所有參數利用py的*args和**kw

    def?log(f):
    ????def?fn():
    ????????print?'call?'?+?f.__name__?+?'()...'
    ????????return?f(*args,?**kw)
    ????return?fn

    ?print 'call %s() in %fs' %(f._name_,(t2 -t1))

    %s指在為輸出內容占位置,輸出的內容為%后的f._name_和(t2 -t1),_name_是py中內建變量、模塊標識的名字,所以f._name_即返回f的名字

    time.time()返回當前的時間戳 使用前聲明用 import time

    查看全部
  • 裝飾器:定義了一個函數在運行時動態增加功能又不改變原函數 @語法簡化裝飾器調用

    @new_fn? ? ? ? ? ? ? ? ? ? ? ? ? ? ?def f1(x):

    def f1(x):? ? ? ?--------------->?????return x*2

    ????return x*2? ? ? ? ? ? ? ? ? ? ? ? f1 = new_fn(f1)

    原有f1被徹底隱藏

    裝飾器作用:極大簡化代碼,避免每個函數編寫重復性代碼

    打印日志:@log

    檢測性能:@performance

    數據庫事務:@transaction

    URL路由:@post('/register')

    查看全部
  • 匿名函數:lambda? 函數參數:表達式

    匿名函數只能有一個表達式,不寫return,返回值就是該表達式的結果

    使用匿名函數可以不定義函數名,直接創建一個函數對象,返回函數的時候也可以返回匿名函數

    查看全部
  • 閉包:內層函數引用了外層函數的變量(參數也算變量),然后返回內層函數的情況

    特點:返回的函數引用了外層函數的局部變量,所以要確保引用的局部變量在函數返回后不能變

    查看全部
    0 采集 收起 來源:python中閉包

    2020-07-08

舉報

0/150
提交
取消
課程須知
本課程是Python入門的后續課程 1、掌握Python編程的基礎知識 2、掌握Python函數的編寫 3、對面向對象編程有所了解更佳
老師告訴你能學到什么?
1、什么是函數式編程 2、Python的函數式編程特點 3、Python的模塊 4、Python面向對象編程 5、Python強大的定制類

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!