Python - 在函数中改变全局变量
我有以下的Python代码:
board = 0
def Board1():
global board
board = 1
def Board2():
global board
board = 2
def Board3(board):
board = 3
print board
def ReadBoard():
print board
我认为函数Board1和Board2应该能改变全局变量board的值。但是发生的情况是:当我调用board时,它返回的是0。如果我调用Board1,全局的board值并没有改变,但如果我调用ReadBoard,它却返回了Board1所赋的值。
举个例子(在Python控制台中):
>>> board
0
>>> Board1()
>>> board
0
>>> ReadBoard()
1
>>> Board3(board)
3
>>> board
0
>>> board = 4
>>> ReadBoard()
1
我搞不懂为什么我不能在全局范围内改变这个全局变量,以及为什么在ReadBoard函数中能读取到被改变的变量。
2 个回答
1
在你第一次把全局变量 board
导入到你的 Python 控制台后,它就不会再改变了。试着把那段代码放到你的文件里(作为打印语句),而不是在控制台里执行,这样应该就能正常工作了。
3
你有一个Python模块,里面定义了一个叫做board
的东西。在你的控制台里,你又创建了一个不同的对象,也叫board
。当你在控制台输出board
时,你看到的是那个控制台里的对象。而当你的模块里的函数打印board
时,它显示的是模块里定义的那个board
。
所以,根本的问题就是你有两个东西都叫board
。
我猜你是这样导入模块的:
from MyModule import *
这样做之后,你就没办法区分这两个board
对象了。所以,建议你使用:
import MyModule
这样你就可以用MyModule.board
来指代模块里定义的全局board
。