Python - 在函数中改变全局变量

2 投票
2 回答
9371 浏览
提问于 2025-04-17 20:14

我有以下的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

撰写回答