python - "return"和 "return None"生成器中的行为差异

标签 python python-3.x generator

仅使用 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/

相关文章:

python - 属性错误 : 'str' object has no attribute 'decode' while building a logistic regression model

python - Python 中的正则表达式

python-3.x - Cron 作业中的 PyAutoGUI

python - fileinput.hook_compressed 有时给我字符串,有时给我字节

python - 使用pygtk执行Python而不出现终端

python - 返回列表的多个元素

python - 与特殊值交织的排列

c++ - 使用迭代器实现状态机(ala 生成器)

python - 如何解释Python中的timeit命令

python - 嵌套生成器和 yield 来自?