问题描述
我已经在 cpython 源代码中看到了 PyId_
变量的用法。我无法追溯到其中任何一个的定义。
谁或什么将它们解析为字符串?我在 cpython 源代码上看到了一个带有 kNown.csv
文件的 C 分析器,列出了其中的大部分(但不是全部)。不确定是否相关。
解决方法
正如@jasonharper 所说,PyId_
变量是使用 _Py_IDENTIFIER
定义的,通常位于源文件的顶部。
片段:
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname,#varname)
_Py_IDENTIFIER
使用 stringizing and token-parsing 运算符工作,允许您以编程方式定义新变量。
然后将字符串值驻留以提高内存效率。