生成器
要创建一个生成器,只需要将函数中的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)
本文介绍Python中的生成器及生成器表达式的概念与应用。通过实例展示如何使用yield关键字创建生成器,并解释生成器的工作原理。同时,比较生成器表达式与传统列表解析的区别,说明其在内存效率上的优势。
817

被折叠的 条评论
为什么被折叠?



