PyId_ 变量如何在 CPython 中解析?

How do PyId_ variables resolve in CPython?

我在 CPython 源代码中看到了 PyId_ 变量的用法。我无法追溯到其中任何一个的定义。

示例包括 PyId___name__ 等。

谁或什么将它们解析为字符串?我在 CPython 源代码中看到了带有 known.csv 文件的 C 分析器,列出了其中的大部分(但不是全部)。不确定是否相关。

正如@jasonharper 所说,PyId_ 变量是使用 _Py_IDENTIFIER 定义的,通常在源文件的顶部找到。

片段:

#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)

_Py_IDENTIFIER 使用 stringizing and token-parsing 运算符工作,允许您以编程方式定义新变量。

然后驻留字符串值以提高内存效率。