【问题标题】:What is None doing in the code object's co_consts attribute?None 在代码对象的 co_consts 属性中做了什么?
【发布时间】:2014-12-27 13:33:26
【问题描述】:

以下函数返回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中呢?

【问题讨论】:

    标签: python python-2.7 python-internals


    【解决方案1】:

    函数的默认返回值是None,所以它总是被插入。 Python 不想分析您是否总是会到达 return 语句。

    举个例子:

    def foo():
        if True == False:
            return 1
    

    上述函数将返回None,但这只是因为if 语句永远不会是True。

    在您的简单情况下,我们人类很明显只有一个RETURN_VALUE 操作码,但将其扩展到计算机检测的一般情况是不值得的。最好只存储 None 引用并完成它,一个引用非常便宜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多