从a comment:“全球在Python中基本上意味着在模块级别”。然而,在一个名为my_module.py
文件运行此代码:什么是模块变量与全局变量?
import my_module as m
foo = 1
m.bar = m.foo + 1
if __name__ == "__main__":
print('foo:', foo)
print('m.foo:', m.foo)
print('m.bar:', m.bar, '\n')
for attrib in ('foo', 'bar'):
print("'{0}' in m.__dict__: {1}, '{0}' in globals(): {2}".format(
attrib,
attrib in m.__dict__,
attrib in globals()))
输出:
foo: 1
m.foo: 1
m.bar: 2
'foo' in m.__dict__: True, 'foo' in globals(): True
'bar' in m.__dict__: True, 'bar' in globals(): False
究竟是模块和全局命名空间?
为什么在模块命名空间中有__dict__
属性,但不在全局命名空间中?
为什么m.bar
部分__dict__
而不是globals()
的一部分?
很清楚,我的错误并不是要明白两个foo是不同的实体,否则我也会挑战其余的。顺便说一句,我现在也明白我也可以访问'm.m.m.m.bar': – mins
我有一个问题,但是:是否有一个实际的用例来导入模块本身?还是只是好奇? – MSeifert
不是一个真实的案例。试图比较'__dict__'和'globals()'的内容。我不能没有进口。 – mins