仅使用 return 关键字的简单方法会返回 None
def abc():
return
print(abc())
输出:无
同样,
def abc():
return None
print(abc())
输出:无
但是如果我们在生成器中使用它
def abc():
yield 1
return None
print(abc())
它给出
SyntaxError: 'return' with argument inside generator
哪里为
def abc():
yield 1
return
print(abc())
给出
<generator object abc at 0x7f97d7052b40>
为什么我们的行为会有这种差异?
最佳答案
裸露return
对于尽早脱离生成器很有用。
同时return None
只是 return <a value>
的一个特例,以及之前 yield from
(PEP 380) 没有从生成器返回值的支持或用例。因此,为了让设计空间保持开放,它被禁止了:通过禁止在生成器中返回值,Python 的设计者使得以后可以使用新的语义来允许它,因为这不会破坏现有的代码。
如果他们允许返回值而不对其进行任何操作,则会出现风险用户态代码 would break 。这就是为什么从前向兼容性的角度来看,通常最好限制尽可能多的 API,您保留开放用户的所有内容都将利用,并且更改会变得有风险。
关于python - "return"和 "return None"生成器中的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60058124/