我想从Python 2.7中的函数修改全局变量
x = 0
def func():
global x
x = 2
如果我在解释器中加载此代码,然后运行func(),则x保持为0.如何在函数内修改x的值?
编辑:这是解释器和源代码的屏幕截图。我不确定为什么它适用于其他人而不适合我。 http://img18.imageshack.us/img18/9567/screenshotfrom201304222.png
答案 0 :(得分:1)
这是一个非常有趣的情况。当我使用from mytest import *
的解释器运行您的代码时遇到了同样的问题:
>>> from mytest import *
>>> x
0
>>> func()
>>> x
0
但是,当我刚刚执行import mytest
并从那里运行时:
>>> import mytest
>>> mytest.x
0
>>> mytest.func()
>>> mytest.x
2
结果很好!我认为,原因来自http://docs.python.org/2/reference/simple_stmts.html#the-global-statement:
中的一行全局声明中列出的名称不得定义为正式名称 参数或for循环控制目标,类定义,函数 定义或导入声明。
看起来因为它是导入语句中的参数(通过全部导入),global
遇到了问题。您需要import *
,还是只需导入整个模块?