Python模块中的name变量是如何定义的?

2024-04-26 23:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道the standard example:如果直接执行模块,那么它就是__name__全局变量定义为"__main__"。然而,在文档中,我找不到在一般情况下如何定义__name__的精确描述。module documentation说。。。

Within a module, the module's name (as a string) is available as the value of the global variable __name__.

……但“模块名称”是什么意思?它只是模块的名称(删除了.py的文件名),还是也包括完全限定的包名称?

如何确定Python模块中__name__变量的值?为了获得额外的好处,请精确地指出在Python源代码中执行此操作的位置。


Tags: 模块thename文档名称定义mainexample
2条回答

它设置为导入时模块的绝对名称。如果导入为foo.bar,则__name__设置为'foo.bar'

名称是在^{}模块中确定的,但由于该模块处理各种不同类型的导入(包括zip导入、仅字节码导入和扩展模块),因此有几个代码路径可跟踪。

通常,import语句被转换为对__import__的调用,默认情况下是implemented as a call to ^{}。请参阅^{} documentation了解参数的含义。在^{}中,将解析相对名称,因此如果需要,可以在那里向下搜索name变量。

模块的其余部分处理实际的导入,使用PyImport_AddModuleObject创建实际的命名空间对象并设置name键,但是可以将该name值跟踪回PyImport_ImportModuleLevelObject。通过创建模块对象,它的__name__值在^{} object constructor中设置。

变量__name__是模块的一个属性,可以通过名称访问。

import os
assert os.__name__ == 'os'

示例自建模块,用于检查导入机制:

>>> import types
>>> m = types.ModuleType("name of module") # create new module with name
>>> exec "source_of_module = __name__" in m.__dict__ # execute source in module
>>> m.source_of_module
'name of module'

来自类型模块的行:

import sys
ModuleType = type(sys)

相关问题 更多 >