rau*_*ira 9 python yield generator
从python函数中产生时如何连接两个项?
基本情况:
import itertools
def test():
for number in range(0,10):
yield number
list(test()) # [0...9]
Run Code Online (Sandbox Code Playgroud)
如果我想同时得到number它的正方形怎么办?number**2
import itertools
def test():
for number in range(0,10):
yield itertools.chain.from_iterable([
number,number*2
])
list(test())
# [0,0,1,1,2,4,3,9,...] pretended
# <itertools.chain at 0x135decfd0> ... what I got
Run Code Online (Sandbox Code Playgroud)
但是,itertools.chain.from_iterable([generator1, generator2])从外部做,给出了预期的结果.
def first_list():
for number in range(0,5):
yield number
def second_list():
for number in range(5,10):
yield number
list(itertools.chain.from_iterable([first_list(), second_list()]))
Run Code Online (Sandbox Code Playgroud)
car*_*ues 10
一个简单的方法是:
def test():
for number in range(0,10):
yield number
yield number**2
Run Code Online (Sandbox Code Playgroud)
MSe*_*ert 10
Python 3.3还引入了yield from(参见PEP-380)语法,允许您执行以下操作:
>>> def test():
... for number in range(10):
... yield from (number, number**2)
...
>>> list(test())
[0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81]
Run Code Online (Sandbox Code Playgroud)