python - 生成器中的“return”和“return None”行为差异
问题描述
仅使用 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 的设计者可以在以后使用新的语义来允许它,因为这不会破坏现有代码。
如果他们允许返回值而不做任何事情,那么用户态代码就有可能会破坏。这就是为什么从前向兼容性的角度来看,尽可能地限制API 通常更好,你让开放用户可以利用的所有东西,并且改变它会变得有风险。
推荐阅读
- python - 绘制比例轴标签单位
- typescript - 如何在打字稿中计算 SMS 消息段?
- python - 使用索引数组中的索引元组索引多维数组 - NumPy / Python
- android - Google play 上的新格式 Bundle 应用怎么样?
- laravel - Laravel - 常量表达式包含 Select distinct 中的无效操作
- c# - 在代码中复制上、下、左、右 UI 选择以用于语音控制
- jenkins - 如何避免 Jenkins 要求在受信任的共享管道中进行调用的进程内批准
- r - R:使用 ggplotly 或 plotly 在工具提示上格式化货币
- stripe-payments - 为什么只能对条带订单使用持续时间“一次”?
- excel - 计算来自不同行的 2 个度量之间的差异