Python生成器與生成器表示式
阿新 • • 發佈:2019-01-24
生成器
要建立一個生成器,只需要將函式中的return替換為yield即可:
def squares(n=10):
print 'Generating squares from 1 to %d' % (n**2)
for i in xrange(1, n+1):
yield i ** 2
呼叫生成器時,沒有任何程式碼會即刻執行, 只有從該生成器中請求元素的時候,它才開始執行程式碼。
generator = squares()
for x in generator:
print x,
Generating squares form 1 to 100
1 4 9 16 25 36 49 64 81 100
標準庫itertools
中有一組用於許多常見資料演算法的生成器
生成器表示式
懶惰的列表解析
(expr for iter_var in iterable if cond_expr)
生成器表示式使用了“延遲計算”(lazy evaluation),所以它在使用記憶體上更有效。
例子:
計算平均詞長
count = 0
total = 0
for token in tokens:
count += 1
total += len(token)
print total/count
total = sum(len(t) for t in tokens) #生成器表示式
print total/ len(tokens)