生成器(Generators)
首先要理解迭代器(iterators)
- 可迭代对象(Iterable):Python中任意的对象,只要它定义了可以返回一个迭代器的
__iter__方法,或者定义了可以支持下标索引的__getitem__方法,那么它就是一个可迭代对象。 - 迭代器(Iterator)迭代器是一个让程序员可以遍历一个容器(特别是列表)的对象
- 迭代(Iteration)它就是从某个地方(比如一个列表)取出一个元素的过程
生成器
生成器也是一种迭代器,但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而,它们并不返回一个值,而是yield(暂且译作“生出”)一个值。
def generator_function():
for i in range(10):
yield i
for item in generator_function():
print(item)
i.next()
列表表达式-生成器
g = (i**2 for i in range(1, 11))
type(g)
generator
g.next()
1
...
函数生成器
def genfunc(n):
for i in range(n):
yield i
gf = genfunc(11)
type(gf)
generator
gf.next()
0







网友评论