1. 程式人生 > >Python生成器與生成器表示式

Python生成器與生成器表示式

生成器

要建立一個生成器,只需要將函式中的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)