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 运算符工作,允许您以编程方式定义新变量。
然后驻留字符串值以提高内存效率。
我在 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 运算符工作,允许您以编程方式定义新变量。
然后驻留字符串值以提高内存效率。