生成器(Generators)

生成器(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

你可能感兴趣的:(生成器(Generators))