在Python中更改全局变量

在Python中更改全局变量,python,global-variables,Python,Global Variables,我想修改Python 2.7中函数的全局变量 x = 0 def func(): global x x = 2 如果我在解释器中加载这段代码,然后运行func(),x将保持为0。如何从函数中修改x的值 编辑:这是解释器和源代码的截图。我不知道为什么它对别人有效而对我无效。 这是一个非常有趣的情况。当我使用mytest import*中的从解释器运行代码时,我遇到了相同的问题: >>> from mytest import * >>> x 0

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

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

编辑:这是解释器和源代码的截图。我不知道为什么它对别人有效而对我无效。
这是一个非常有趣的情况。当我使用mytest import*中的
从解释器运行代码时,我遇到了相同的问题:

>>> from mytest import *
>>> x
0
>>> func()
>>> x
0
但是,当我刚刚导入mytest并从那里运行它时:

>>> import mytest
>>> mytest.x
0
>>> mytest.func()
>>> mytest.x
2
结果很好!我相信,原因来自于一句话:

全局语句中列出的名称不得定义为正式名称 for循环控制目标、类定义、函数中的参数或 定义或导入语句


看起来是因为它是导入语句中的一个参数(通过导入全部),
global
遇到了问题。您需要导入*
,还是只需导入整个模块?

这是一个非常有趣的情况。当我使用mytest import*中的
从解释器运行代码时,我遇到了相同的问题:

>>> from mytest import *
>>> x
0
>>> func()
>>> x
0
但是,当我刚刚导入mytest并从那里运行它时:

>>> import mytest
>>> mytest.x
0
>>> mytest.func()
>>> mytest.x
2
结果很好!我相信,原因来自于一句话:

全局语句中列出的名称不得定义为正式名称 for循环控制目标、类定义、函数中的参数或 定义或导入语句


看起来是因为它是导入语句中的一个参数(通过导入全部),
global
遇到了问题。您需要导入*
,还是只需导入整个模块?

这对我来说是有效的。你确定你调用了这个函数吗?我粘贴代码,调用
func()
,然后
print x
。我明白了。你在说什么?它仍然有效。您可以尝试在
func()
中打印所有
globals()
,以查看是否包含
x
。这对我来说是有效的。你确定你调用了这个函数吗?我粘贴代码,调用
func()
,然后
print x
。我明白了。你在说什么?它仍然有效。您可以尝试在
func()
中打印所有
globals()
,以查看是否包含
x