python 是否将无 return 语句视为与 return None 完全相同?
Does python treat no return statement the exact same as return None?
代码:
def foo():
if condition:
return some_value
return None
def bar():
if condition:
return some_value
这两个 return None 如果条件为假,但它们在计算时间或其他方面是否有所不同?一般首选哪一个
在 CPython 的当前版本中,return None
与完全不 return 完全相同。两者都被编译成两个字节码,一个 LOAD_CONST
字节码(加载 None
)和一个 RETURN_VALUE
(执行 return)。
您可以通过使用 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
可能会让 阅读 代码的人更加清楚您关心的 return 值。依赖隐式 return 值表明您不关心 return 值,并且调用该函数主要是为了它的副作用(例如打印某些东西,或在适当的地方改变某些对象)。
阅读您的代码的人 将来可能就是您 ,在您完全忘记如何编写此功能之后。编写清楚自己在做什么的代码通常比编写正确编译和运行的代码更难。
代码:
def foo():
if condition:
return some_value
return None
def bar():
if condition:
return some_value
这两个 return None 如果条件为假,但它们在计算时间或其他方面是否有所不同?一般首选哪一个
在 CPython 的当前版本中,return None
与完全不 return 完全相同。两者都被编译成两个字节码,一个 LOAD_CONST
字节码(加载 None
)和一个 RETURN_VALUE
(执行 return)。
您可以通过使用 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
可能会让 阅读 代码的人更加清楚您关心的 return 值。依赖隐式 return 值表明您不关心 return 值,并且调用该函数主要是为了它的副作用(例如打印某些东西,或在适当的地方改变某些对象)。
阅读您的代码的人 将来可能就是您 ,在您完全忘记如何编写此功能之后。编写清楚自己在做什么的代码通常比编写正确编译和运行的代码更难。