python是如何知道名称应该是什么的?

python是如何知道名称应该是什么的?,python,import,namespaces,python-import,python-internals,Python,Import,Namespaces,Python Import,Python Internals,从命令行运行脚本时,该脚本的\uuuu name\uuuu属性将是'\uuuu main\uuuu'。但是导入从其他位置导入该脚本时,该模块的名称属性将是脚本的名称 python如何知道\uuuu name\uuuu的值应该是什么?脚本能否告知正在导入它,并相应地设置\uuu name\uuu属性 在加载过程中,在加载程序执行模块之前,导入机制会根据模块的规范在每个模块对象上填充这些属性 \uuuu name\uuuuu \uuuu name\uuuu属性必须设置为模块的完全限定名称。此名称用

从命令行运行脚本时,该脚本的
\uuuu name\uuuu
属性将是
'\uuuu main\uuuu'
。但是
导入
从其他位置导入该脚本时,该模块的
名称
属性将是脚本的名称

python如何知道
\uuuu name\uuuu
的值应该是什么?脚本能否告知正在导入它,并相应地设置
\uuu name\uuu
属性

在加载过程中,在加载程序执行模块之前,导入机制会根据模块的规范在每个模块对象上填充这些属性

\uuuu name\uuuuu

\uuuu name\uuuu
属性必须设置为模块的完全限定名称。此名称用于唯一标识导入系统中的模块

因此,这些神奇的属性在所谓的“进口机械”中被赋予。您还可以阅读更多详细信息。

在加载过程中,在加载程序执行模块之前,导入机制会根据模块的规范在每个模块对象上填充这些属性

\uuuu name\uuuuu

\uuuu name\uuuu
属性必须设置为模块的完全限定名称。此名称用于唯一标识导入系统中的模块

因此,这些神奇的属性在所谓的“进口机械”中被赋予。你也可以阅读更多的细节

Q:python如何知道
\uuuu name\uuuu
的值应该是什么

如果您编写
importfoo
Python将查找名为“foo”的模块,并将其名称设置为“foo”

Q:模块是否可以判断它正在导入

是的,它可以。通常情况下,人们会这样做——如果测试通过,通常意味着模块正在执行,如果测试失败,则通常意味着模块正在导入

当您有一个名为
\uuuuu main\uuuu
的模块(在名为
\uuuuuu main\uuuuu.py
的文件中)时,此测试将失败

如果您想100%确定,可以检查并查看模块是否位于堆栈顶部:

f = sys._getframe()
if f.f_back is None:
    # We're at the top of the stack: this module is being executed.
else:
    # There's a frame on top of us: this module has been imported.
Q:。。。并相应地设置
\uuuu name\uuuu
属性

是的,您可以通过简单的设置将
\uuuu name\uuu
更改为您想要的任何内容:

__name__ = 'bar'
虽然除了产生混乱和可能引入错误之外,没有理由这么做

Q:python如何知道
\uuuu name\uuuu
的值应该是什么

如果您编写
importfoo
Python将查找名为“foo”的模块,并将其名称设置为“foo”

Q:模块是否可以判断它正在导入

是的,它可以。通常情况下,人们会这样做——如果测试通过,通常意味着模块正在执行,如果测试失败,则通常意味着模块正在导入

当您有一个名为
\uuuuu main\uuuu
的模块(在名为
\uuuuuu main\uuuuu.py
的文件中)时,此测试将失败

如果您想100%确定,可以检查并查看模块是否位于堆栈顶部:

f = sys._getframe()
if f.f_back is None:
    # We're at the top of the stack: this module is being executed.
else:
    # There's a frame on top of us: this module has been imported.
Q:。。。并相应地设置
\uuuu name\uuuu
属性

是的,您可以通过简单的设置将
\uuuu name\uuu
更改为您想要的任何内容:

__name__ = 'bar'

尽管除了产生混乱和可能引入错误之外,没有理由这样做。

如果是模块,则它是模块的名称。@WillemVanOnsem为准确度而编辑。如果是模块,则它是模块的名称。@WillemVanOnsem为准确度而编辑。@WillemVanOnsem为准确度而编辑