生成器和yield关键字是一个比较难以理解的感念。我不想详尽描述它
只是捡着几个点实践。毕竟大家都很忙,除非必要,无需费神理解很透彻。
yield的功能类似 return ,不同的是yeild返回的是生成器。
每个生成器只能使用一次,然而我们可以再创建
生成器可以用来处理无穷序列
yield就是专门给生成器用的return
yield的作用就是把一个函数变成一个generator
函数在每次for循环中调用一次,执行到yeild的时候返回迭代值
函数状态保存在本地变量中,直到下一次被调用。
通过yield创建生成器
def function():
for i in xrange(10):
yield i
通过列表来创建生成器
[i for i in xrange(10)]
测试 生成器的next函数
def func():
for i in xrange(10):
yield i
f = func()
print(f)
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
print(f.next())
结果
<generator object func at 0x7f5a5d32f1e0>
0
1
2
3
4
5
6
7
8
9
Traceback (most recent call last):
File "y.py", line 27, in <module>
print(f.next())
StopIteration
测试生成器 send函数
def fun():
n = 0
while True:
n = yield n
f = fun()
print(f.next())
print(f.send(1))
print(f.send(2))
结果
0
1
2
生成器可以避免内存限制问题,尤其是生成一个很大或者无限大的列表
这个列表要保存在内存中,对内存的限制就很明显