25 python python-module python-internals
我知道标准的例子:如果你直接执行一个模块,那么它的__name__全局变量定义为"__main__".但是,在文档中没有任何地方可以找到__name__在一般情况下如何定义的精确描述.该模块的文件说...
在模块中,模块的名称(作为字符串)可用作全局变量的值
__name__.
......但是"模块名称"是什么意思?它只是模块的名称(已.py删除的文件名),还是包含完全限定的包名称?
如何__name__确定Python模块中变量的值?对于奖励积分,请准确指出在Python源代码中执行此操作的位置.
Mar*_*ers 25
它被设置为导入的模块的绝对名称.如果您将其导入为foo.bar,则__name__设置为'foo.bar'.
该名称在import.c模块中确定,但由于该模块处理各种不同类型的导入(包括zip导入,仅字节码导入和扩展模块),因此需要跟踪几个代码路径.
通常,import语句被转换为调用__import__,默认情况下实现为调用PyImport_ImportModuleLevelObject.请参阅__import__()文档以了解参数的含义.在PyImport_ImportModuleLevelObject相对名称内被解析,因此您可以name根据需要在那里追逐变量.
模块的其余部分处理实际的导入,PyImport_AddModuleObject创建实际的命名空间对象并设置name密钥,但您可以追溯到该name值PyImport_ImportModuleLevelObject.通过创建模块对象,它的__name__值在moduleobject.c对象构造函数中设置.