def genfunc(outer_iterable):
for x in outer_iterable:
yield x*x
ge = genfunc([1, 2, 3])
也就是说,send参数被丢弃。你知道吗
我们可以分解字节码以进一步确认:
import dis
ge=(x*x for x in [1,2,3])
print('Genexp:')
dis.dis(ge)
def genfunc(outer_iterable):
for x in outer_iterable:
yield x*x
ge = genfunc([1, 2, 3])
print()
print('Generator function:')
dis.dis(ge)
与
send
使用生成器函数创建的等效生成器相同:也就是说,
send
参数被丢弃。你知道吗我们可以分解字节码以进一步确认:
Output:
genexp和通过generator函数创建的generator具有非常相似的分解,在这两个函数中,
YIELD_VALUE
后面紧跟着一个POP_TOP
,它丢弃从send
发送的任何值。你知道吗谢谢大家。所以是的,send的arg被丢弃了,但是send被接受这一事实似乎是一个异常。你知道吗
另一个相关的bug已经在这里被注释过了(第32139885页),yield表达式应该在genexps中被禁止,但是它不是。形式
ge=((yield x*x) for x in [1,2,3])
被接受,并且.send()
可以工作。你知道吗由
send
返回的答案是内部iterable中元素的混合物,send
的arg。。。如果我没有弄错的话,GvR写道在python3.8中,这个(yield表达式)将被视为一个错误,在3.7中,它应该表示它已被弃用。(人们一致认为这很混乱。)但我在python3.7(Anaconda,windows64)中测试了它,没有收到任何弃用警告。无论如何,这似乎是一个真正的错误,而不是一个功能被否决。我相信现在没有什么可说的了。。。你知道吗
JK公司
相关问题 更多 >
编程相关推荐