以下函数返回None
:
In [5]: def f():
...: pass
所以我对这个输出并不感到惊讶:
In [8]: dis.dis(f)
2 0 LOAD_CONST 0 (None)
3 RETURN_VALUE
In [10]: f.__code__.co_consts
Out[10]: (None,)
好的,这是有道理的。但现在,请考虑以下功能:
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)
g
不使用None
,为什么它在co_consts
?
答案 0 :(得分:8)
函数的默认返回值为None
,因此始终插入。如果你总是要达到一个返回语句,Python并不想分析。
考虑例如:
def foo():
if True == False:
return 1
上述函数将返回None
,但仅仅因为if
语句永远不会是True
。
在您的简单情况下,我们人类很明显只有一个RETURN_VALUE
操作码,但是将其扩展到计算机检测的一般情况并不值得。最好只存储None
引用并完成它,一个引用非常便宜。