码:
def foo():
if condition:
return some_value
return None
def bar():
if condition:
return some_value
如果条件为假,则两者都返回None,但是它们在计算时间或其他方面是否有所不同?通常首选哪一个
在当前版本的CPython中,return None
与完全不返回完全相同。两者都被编译成两个字节码,一个LOAD_CONST
字节码(用于加载None
)和一个RETURN_VALUE
(用于返回)。
您可以通过使用dis
模块分解已编写的两个函数来查看此信息:
>>> import dis
>>> dis.dis(foo)
2 0 LOAD_GLOBAL 0 (condition)
2 POP_JUMP_IF_FALSE 8
4 4 LOAD_GLOBAL 1 (some_value)
6 RETURN_VALUE
5 >> 8 LOAD_CONST 0 (None)
10 RETURN_VALUE
>>> dis.dis(bar)
8 0 LOAD_GLOBAL 0 (condition)
2 POP_JUMP_IF_FALSE 8
10 4 LOAD_GLOBAL 1 (some_value)
6 RETURN_VALUE
>> 8 LOAD_CONST 0 (None)
10 RETURN_VALUE
唯一的区别是bar
行数更少(在第一列中指示),因为隐式return
代码不对应于源代码中的任何行。
但是,它们相同的事实是实现细节。其他Python解释器(甚至包括其他版本的CPython)可能会为两种情况生成不同的代码。
即使实现是相同的,显式方法return None
也可以使阅读代码的人更清楚自己关心的是返回值。依赖隐式返回值表明您不必关心该返回值,并且主要是因为该函数的副作用(例如,打印某些内容或对某个对象进行突变)而调用该函数。
在您完全忘记了对该功能的编程方式之后,将来阅读您的代码的人可能就是您。编写清楚的代码通常比编写可正确编译和运行的代码更加困难。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句