usu*_* me 7 python python-2.7 python-internals
以下函数返回None:
In [5]: def f():
...: pass
Run Code Online (Sandbox Code Playgroud)
所以我对这个输出并不感到惊讶:
In [8]: dis.dis(f)
2 0 LOAD_CONST 0 (None)
3 RETURN_VALUE
In [10]: f.__code__.co_consts
Out[10]: (None,)
Run Code Online (Sandbox Code Playgroud)
好的,这是有道理的.但是现在,考虑以下功能:
In [11]: def g():
....: return 1
In [12]: dis.dis(g)
2 0 LOAD_CONST 1 (1)
3 RETURN_VALUE
In [13]: g.__code__.co_consts
Out[13]: (None, 1)
Run Code Online (Sandbox Code Playgroud)
g不使用None,为什么会这样co_consts?
函数的默认返回值是None,因此始终插入.如果你总是要达到一个return语句,Python不想分析.
考虑例如:
def foo():
if True == False:
return 1
Run Code Online (Sandbox Code Playgroud)
上面的函数将返回None,但只是因为该if语句永远不会出现True.
在您的简单情况下,对我们人类来说很明显只有一个RETURN_VALUE操作码,但是将其扩展到计算机检测的一般情况并不值得.更好的只是存储None参考并完成它,一个参考是非常便宜的.