gpt4 book ai didi

python - 在生成器中与产量一起返回

转载 作者:IT老高 更新时间:2023-10-28 20:36:34 29 4
gpt4 key购买 nike

在 Python 2 中,当 returnyield 一起出现在函数定义中时会出错。但是对于 Python 3.3 中的这段代码:

def f():
return 3
yield 2

x = f()
print(x.__next__())

return 用在 yield 的函数中没有错误。然而,当函数 __next__ 被调用时,就会抛出异常 StopIteration。为什么没有返回值3?这个 return 是否被忽略了?

最佳答案

这是 Python 3.3 中的一项新功能(如注释所述,它甚至在 3.2 中都不起作用)。很像 return在一个生成器中早就相当于raise StopIteration() , return <something>在生成器中现在相当于 raise StopIteration(<something>) .因此,您看到的异常应打印为 StopIteration: 3 ,并且可以通过属性 value 访问该值在异常对象上。如果生成器被委托(delegate)使用(也是新的)yield from语法,就是结果。见 PEP 380了解详情。

def f():
return 1
yield 2

def g():
x = yield from f()
print(x)

# g is still a generator so we need to iterate to run it:
for _ in g():
pass

这将打印 1 ,但不是 2 .

关于python - 在生成器中与产量一起返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780002/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com