2015-12-12 135 views
2

全局变量不能改变

>>> foo(12) 
>>> a 
42 

只有当我将该块输入到控制台时,它才能真正起作用。

>>> foo(12) 
>>> a 
12 

这是为什么?

+0

什么是NUM到底是什么?而且你不会回报a的价值,你期望什么? – Inkblot

+0

@Inkblot我加了一些额外的信息 – binaryfunt

+0

能'a'生活在加载了'import'的foo.py文件中吗?如果是的话,请说明你是如何导入一切的。 –

回答

3

问题是您正在更改模块级别的变量a。 我假设你只需从该模块导入所有内容。

让文件mymodule.py包含代码

a = 42 

def foo(num): 
    global a 
    a = num 

现在让我们运行一个解释对话:

>>> from mymodule import * 
>>> a 
42 
>>> foo(12) 
>>> a 
42 
>>> import mymodule 
>>> mymodule.a 
12 
+2

好的赶上!仍然试图猜测可以做些什么......无论如何,'从模块导入*'通常是问题的根源,因为除了设计得很仔细的模块之外,它将模块化分解成几部分。 –

+0

我正在使用'%run'魔术命令。这似乎与'from ... import *'类似 – binaryfunt