我在文件mymodule.py中添加了一个方法:
def do_something():
global a
a=1
如果我尝试
>>> execfile('mymodule.py')
>>> do_something()
>>> print a
我按照预期得到“1”。但是如果我改为导入模块,
>>> from mymodule import *
然后运行do_something(),然后python会话对变量“a”一无所知。
有人可以向我解释这个区别吗?感谢。
答案 0 :(得分:3)
execfile
没有globals
,locals
参数,它执行当前命名空间中的文件内容。 (调用execfile
)的相同名称空间
while import
在分离的命名空间中执行指定的模块,并在本地命名空间中定义mymodule
。
答案 1 :(得分:1)
在您导入mymodule
的第二部分中,它未显示的原因是a
对mymodule
的命名空间是全局的,就像这样做。
尝试:
print mymodule.a
打印:
1
正如所料。
全球声明是一个适用于整个声明的声明 当前代码块。这意味着列出的标识符是 解释为全局变量。分配到全球是不可能的 变量没有全局变量,尽管自由变量可以引用全局变量 没有被宣布为全球性。
全局语句中列出的名称不得在同一代码中使用 在该全局语句之前的文本块。
全局声明中列出的名称不得定义为正式名称 参数或for循环控制目标,类定义,函数 定义或导入声明。