作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
以下函数返回无
:
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
中呢?
最佳答案
函数的默认返回值是None
,所以它总是被插入。 Python 不想分析您是否总是要到达返回语句。
例如考虑:
def foo():
if True == False:
return 1
上述函数将返回 None
,但这只是因为 if
语句永远不会是 True
。
在您的简单情况下,对我们人类来说很明显只有一个 RETURN_VALUE
操作码,但是将其扩展到计算机检测的一般情况是不值得的。最好只存储 None
引用并完成它,一个引用非常便宜。
关于python - None 在代码对象的 co_consts 属性中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27667747/
以下函数返回无: In [5]: def f(): ...: pass 所以我对这个输出并不感到惊讶: In [8]: dis.dis(f) 2 0 LOAD_C
Python 编译器生成的代码对象包含指令中使用的常量元组(名为 co_consts )以及包含名称的元组(名为 co_names )。 为什么有两个不同的列表?使用 co_consts 不会更简单也
我是一名优秀的程序员,十分优秀!