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

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

python進階

廖雪峰 移動開發工程師
難度中級
時長 3小時33分
學習人數
綜合評分9.20
575人評價 查看評價
9.6 內容實用
9.0 簡潔易懂
9.0 邏輯清晰
  • 在函數內部定義的函數和外部定義的函數是一樣的,只是他們無法被外部訪問: def g(): print 'g()...' def f(): print 'f()...' return g 將 g 的定義移入函數 f 內部,防止其他代碼調用 g: def f(): print 'f()...' def g(): print 'g()...' return g 但是,考察上一小節定義的 calc_sum 函數: def calc_sum(lst): def lazy_sum(): return sum(lst) return lazy_sum 注意: 發現沒法把 lazy_sum 移到 calc_sum 的外部,因為它引用了 calc_sum 的參數 lst。 像這種內層函數引用了外層函數的變量(參數也算變量),然后返回內層函數的情況,稱為閉包(Closure)。 閉包的特點是返回的函數還引用了外層函數的局部變量,所以,要正確使用閉包,就要確保引用的局部變量在函數返回后不能變。舉例如下: # 希望一次返回3個函數,分別計算1x1,2x2,3x3: def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() 你可能認為調用f1(),f2()和f3()結果應該是1,4,9,但實際結果全部都是 9(請自己動手驗證)。 原因就是當count()函數返回了3個函數時,這3個函數所引用的變量 i 的值已經變成了3。由于f1、f2、f3并沒有被調用,所以,此時他們并未計算 i*i,當 f1 被調用時: >>> f1() 9 # 因為f1現在才計算i*i,但現在i的值已經變為3 因此,返回函數不要引用任何循環變量,或者后續會發生變化的變量。
    查看全部
    0 采集 收起 來源:python中閉包

    2018-03-22

  • 這題到處充滿著函數通過一個變量傳給另一個函數的意思。
    查看全部
    0 采集 收起 來源:python中閉包

    2015-03-09

  • 閉包這個思路雖然很繞,但的確是個好思路,返回函數不要引用任何循環變量,或者后續會發生變化的變量。對不變的變量引用或外部不能訪問的函數。
    查看全部
    0 采集 收起 來源:python中閉包

    2015-03-09

  • 裝飾器的作用
    查看全部
  • def prod(x, y): return x*y print reduce(prod, [2, 4, 5, 7, 12])
    查看全部
  • def format_name(s): return s.lower()[0].upper()+s.lower()[1::] print map(format_name, ['adam', 'LISA', 'barT']) def format_name(s): return s.capitalize() print map(format_name, ['adam', 'LISA', 'barT'])
    查看全部
  • import math def add(x, y, f): return f(x) + f(y) print add(25, 9, math.sqrt)
    查看全部
  • .不能離線哦
    查看全部
  • import time def performance(unit): def perf_decorator(f): def wrapper(*args,**kw): t1=time.time() r=f(*args,**kw) t2=time.time() t=(t2-t1)*1000 if unit=='ms' else (t2-t1) print 'call %s() in %f %s' %(f.__name__,t,unit) return r return wrapper return perf_decorator @performance('ms') def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10)
    查看全部
  • import time def performance(f): def fn(*args,**kw): t1=time.time() r=f(*args,**kw) t2=time.time() print 'call %s() in %fs' %(f.__name__,(t2-t1)) return r return fn @performance def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print factorial(10
    查看全部
  • 當新版本的一個特性與舊版本不兼容時,該特性將會在舊版本中添加到__future__中,以便舊的代碼能在舊版本中測試新特性。
    查看全部
  • 每個包又個_init_.py 文件
    查看全部
  • 調用類屬性的時候必須帶上類名,格式:類名.屬性,不能僅僅寫屬性?。《翌悓傩钥梢詣討B修改
    查看全部
  • 變量可以指向函數,此時變量可以當函數使用,如下 f=abs f(-20) 函數名是指向函數的變量 abs=len #此時abs的作用變為len #例子 def add(x,y,f) return f(x,y,f) #調用并具體化f函數 add(1,-2,abs)
    查看全部
  • print filter(lambda s: s and len(s.strip())>0,['test', None, '', 'str', ' ', 'END'] )
    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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