函數,閉包,叠代器
阿新 • • 發佈:2018-08-10
執行 變量存儲 數據 def iteration clas 叠代器 __next__ 循環
函數名:函數名可以說是一個變量,但它是一個特殊的變量,因為當它與小括號配合使用時就會執行函數.
1.函數名可以放在列表中使用:
1 def one(): 2 print(6) 3 def two(): 4 print(66) 5 li=[one,two] 6 for a in li: 7 a() 8 9 輸出結果: 10 6 11 66
2.函數可以當函數名的參數
1 def one(): 2 print(6) 3 def two(f): 4 print(66) 5 f()6 two(one) 7 8 輸出結果: 9 66 10 6
3.函數可以作為函數的返回值:
1 def one(): 2 print(6) 3 def two(): 4 print(66) 5 return two 6 f=one() 7 f() 8 9 輸出結果: 10 6 11 66
閉包:內層函數對外層函數變量的引用
python規定:如果你在內層函數中訪問了外層函數的變量,那麽這個變量在使用完並不會馬上清空,它將會長期存儲到內存中,可以方便你以後再次調用.
1 def one(): 2 a=6 3 def two(): 4 print(a) 5 return two
這種內層函數需要外層函數的變量時就產生了閉包,
當程序檢測到內部函數會用到外部函數的變量時,就會將變量存儲到內存中,方便外層函數結束時,內層函數也能正常調用
可叠代對象:Iterable,裏面有__iter__()可以獲取叠代器,沒有__next__() (註意每處下劃線都是兩個)
叠代器:Iterator,裏面有__iter__()可以獲取叠代器,有__next__()
用叠代器模擬for循環:
1 # #列如我們要循環一個列表2 a=[1,2,3] 3 li=a.__iter__()#首先獲取到叠代器 4 while 1: #使用while循環獲取數據 5 try: #嘗試運行 6 li2=li.__next__() #通過叠代器獲得一個數據 7 except StopIteration: #處理異常,只能處理寫上的異常如(StopIteration) 8 break #如果出現這種異常則結束
函數,閉包,叠代器