为什么属性名称是CPython字节码中的符号而不是字符串常量?

时间:2017-02-01 00:07:12

标签: python python-internals

我很难理解为什么属性,例如

中的attr
obj.attr

存储在函数对象的co_names内,而不是co_consts

In [1]: import numpy

In [2]: def f():
   ...:     return numpy.array

In [4]: f.__code__.co_names
Out[4]: ('numpy', 'array')

In [5]: from dis import dis

In [7]: dis(f)
  2           0 LOAD_GLOBAL              0 (numpy)
              3 LOAD_ATTR                1 (array)
              6 RETURN_VALUE

背后有什么逻辑吗?我没有看到函数中使用的全局符号与特定对象的属性名称有任何相似之处。由于属性查找在Python中是动态的,因此将属性存储为字符串常量将是更合理的IMO。

相关问题:

Why does python VM have co_names instead of just using co_consts?

0 个答案:

没有答案