python 迭代器、生成器、裝飾器

python 迭代器、生成器、裝飾器

一、迭代器。
1、可迭代對象:定義了__iter__方法,可以直接在for循環中的,如list、str等。
2、可迭代對象實現了next方法就是迭代器,通過iter()函數將可迭代對象轉化爲迭代器
3、python的for循環本質上就是不斷調用next()函數實現
for x in [1,2,3,4,5]:
pass
等價於
it = iter([1,2,3,4,5])
while True:
try:
x = next(it)
except StopIteration:
break
4、平常很少直接用迭代器

二、生成器。
1、列表生成式:a = [i+1 for i in range(10)]
2、列表生成式缺點,容量有限,若只用前面幾個,後面佔用空間都浪費了。
3、爲了解決上面的問題,列表元素需要通過算法推算,不必創建完整list,所以需要一種一邊循環一邊計算的方式,就是生成器
4、創建方法一:a = (i+1 for i in range(10)),即中括號改小括號
創建方法二:生成函數,普通函數用yield可以將普通函數變成生成器。直觀解釋:程序執行到yield返回後面的值並暫停,再次調用next時會從上次暫停的地方繼續執行。
5、函數有了yield後,函數名+()就變成了生成器。
6、生成器是迭代器的一種,自動實現了__iter__和next方法,是可迭代對象,可以用for循環直接遍歷
for i in gen:
print(i)

三、裝飾器。主要作用爲已經存在的函數添加額外的功能,如日誌、登錄。原理是python中函數可以像普通變量一樣當做參數傳給另外一個函數。
寫法是在函數上用@後面加一個函數
我日常用@numba函數加速
@numba.jit
def f():
pass

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章