我想从 Python 2.7 中的函数修改全局变量
x = 0
def func():
global x
x = 2
如果我在解释器中加载这段代码,然后运行 func(),x 保持为 0。如何从函数中修改 x 的值?
编辑:这是解释器和源代码的屏幕截图。我不确定为什么它适用于其他人而不适用于我。 http://img18.imageshack.us/img18/9567/screenshotfrom201304222.png
我想从 Python 2.7 中的函数修改全局变量
x = 0
def func():
global x
x = 2
如果我在解释器中加载这段代码,然后运行 func(),x 保持为 0。如何从函数中修改 x 的值?
编辑:这是解释器和源代码的屏幕截图。我不确定为什么它适用于其他人而不适用于我。 http://img18.imageshack.us/img18/9567/screenshotfrom201304222.png
这是一个非常有趣的情况。当我从解释器运行您的代码时,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 *
,还是可以简单地导入整个模块?