1. 程式人生 > >函數,閉包,叠代器

函數,閉包,叠代器

執行 變量存儲 數據 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 #如果出現這種異常則結束

函數,閉包,叠代器