首页 > 代码库 > 生成器

生成器

1.生成器

一个函数中需要有一个 yield 语句即可将其转换为一个生成器。 跟普通函数不同的是,生成器只能用于迭代操作。

>>> def countdown(n):
...     print(‘Starting to count from‘, n)
...     while n > 0:
...         yield n
...         n -= 1...     print(‘Done!‘)
...>>> # Create the generator, notice no output appears>>> c = countdown(3)>>> c
<generator object countdown at 0x1006a0af0>>>> # Run to first yield and emit a value>>> next(c)
Starting to count from 33>>> # Run to the next yield>>> next(c)2>>> # Run to next yield>>> next(c)1>>> # Run to next yield (iteration stops)>>> next(c)
Done!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>StopIteration>>>

一个生成器函数主要特征是它只会回应在迭代中使用到的next操作。 一旦生成器函数返回退出,迭代终止。我们在迭代中通常使用的for语句会自动处理这些细节

yield from:For simple iterators, yield from iterable is essentially just a shortened form offor item in iterable: yield item:

>>>>>> def g(x):...     yield from range(x, 0, -1)...     yield from range(x)
...>>> list(g(5))[5, 4, 3, 2, 1, 0, 1, 2, 3, 4]

2 itertools.chain()

itertools.chain() 接受一个或多个可迭代对象最为输入参数。 然后创建一个迭代器,依次连续的返回每个可迭代对象中的元素。


本文出自 “机制小风风” 博客,请务必保留此出处http://xiaofengfeng.blog.51cto.com/8193303/1885783

生成器