1

我想从 Python 2.7 中的函数修改全局变量

x = 0
def func():
    global x
    x = 2

如果我在解释器中加载这段代码,然后运行 ​​func(),x 保持为 0。如何从函数中修改 x 的值?

编辑:这是解释器和源代码的屏幕截图。我不确定为什么它适用于其他人而不适用于我。 http://img18.imageshack.us/img18/9567/screenshotfrom201304222.png

4

1 回答 1

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 *,还是可以简单地导入整个模块?

于 2013-04-23T05:07:52.010 回答