python 閉包
阿新 • • 發佈:2017-11-06
python3 style pre 最終 變參 ng- con 結果 pan
閉包概念
在函數內部再定義一個函數,並且這個函數用到了外邊函數的變量,那麽將這個函數以及用到的一些變量稱之為閉包,最終外部函數返回的結果為內部函數
In [33]: def te(number): ...: def te_in(number_in): ...: return number + number_in ...: return te_in ...: In [34]: ret = te(20) In [35]: print(ret) <function te.<locals>.te_in at 0x04563738> In [36]: ret(100) Out[36]: 120 In [37]: te(20)(500) Out[37]: 520
閉包優缺點
1.閉包似優化了變量,原來需要類對象完成的工作,閉包也可以完成
2.由於閉包引用了外部函數的局部變量,則外部函數的局部變量沒有及時釋放,消耗內存
python3 內部函數改變外部參數值
In [38]: def cont(start=0): ...: def incr(): ...: nonlocal start ...: start += 1 ...: return start ...: return incr ...: In [40]: cont(5) Out[40]: <function __main__.cont.<locals>.incr> In [41]: c1 =cont(5) In [42]: print(c1) <function cont.<locals>.incr at 0x04576CD8> In [43]: print(c1()) 6
python2 中要想在閉包中改變參數的值,要借助於可變類型的列表,將參數放在列表的中,對列表內部元素執行改變操作
def counter(start=0): count=[start] def incr(): count[0] += 1 return count[0] return incr c1 = counter(5) print(c1())#6 print(c1())#7 c2 = counter(100) print(c2())#101 print(c2())#102
python 閉包