Python學習筆記-yield用法及優點
概述
yield
用於定義生成器,它最終返回一個生成器物件,這個生成器物件可以被迭代。
例子
# encoding:utf8
import sys
n = 200
m = 1000
# 定義一個生成器,yield必須在函式中使用
def Generators(n):
for i in range(n):
if i%2==0:
yield i
print("引數為200生成器佔用記憶體大小:",sys.getsizeof(Generators(n)))
print("引數為1000生成器佔用記憶體大小:",sys.getsizeof(Generators(m)))
# 建立一個列表物件
listobj_1 = [i for i in range(n) if i%2==0]
listobj_2 = [i for i in range(m) if i%2==0]
print("引數為200列表佔用記憶體大小:",sys.getsizeof(listobj_1))
print("引數為1000列表佔用記憶體大小:",sys.getsizeof(listobj_2))
執行結果
引數為200生成器佔用記憶體大小: 200
引數為1000生成器佔用記憶體大小: 200
引數為200列表佔用記憶體大小: 920
引數為1000列表佔用記憶體大小: 4216
優點
- 記憶體效率:執行結果佔用記憶體不一致,當資料量越大,列表佔用的記憶體就越大,而生成器佔用的記憶體基本上是恆定的
- 惰性求值:只在進行迭代時才生成計算結果,避免無效的計算
- 無限序列:對序列長度沒有限制