隐式生成器的收益?

时间:2018-12-24 06:59:08

标签: python-3.x generator yield

Generator expressions中,

  

为避免干扰生成器表达式本身的预期操作,在隐式定义的生成器中禁止收益和收益。

这是什么意思?

2 个答案:

答案 0 :(得分:2)

这意味着您不能执行以下操作:

sum(yield x*x for x in range(10))

这显然是因为显式yield与所允许的sum(x*x for x in range(10))中的隐式收益交互的方式很难推理,而且一旦开始使用诸如{ {1}}和generator.send

答案 1 :(得分:1)

这是指在生成器表达式中使用yield表达式,例如:

>>> g = ((yield x**2) for x in [1,2,3])                                                 
>>> list(g)                                                                             
[1, None, 4, None, 9, None]

或者:

>>> t = "hello", "world"                                                                
>>> g = ((yield from t) for x in 'xyz')                                                 
>>> list(g)                                                                             
['hello', 'world', None, 'hello', 'world', None, 'hello', 'world', None]

此语法为deprecated in Python 3.7,在Python 3.8+中将为SyntaxError。有关更多详细信息,请参见bpo10544