2

我在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 的值。但这是发生的情况:当我调用板时,它返回 0。如果我调用 Board1,全局板值不会改变,但如果我调用 ReadBoard,它会给出 Board1 分配的值。例如(在 python 控制台中):

>>> board  
0  
>>> Board1()  
>>> board  
0  
>>> ReadBoard()  
1  
>>> Board3(board)
3  
>>> board  
0  
>>> board = 4
>>> ReadBoard()
1  

我不明白为什么我不能全局更改全局变量以及为什么要在 ReadBoard 函数中读取更改后的变量。

4

2 回答 2

3

你有一个 Python 模块,它定义了board. 在您的控制台中,您有另一个您命名的不同对象board。当您board从控制台输出时,您将获得该对象。当包含函数的模块 printboard时,它会打印该模块中定义的对象。

所以根本的问题是你有两个你叫的东西board

我希望您像这样导入模块:

from MyModule import *

这样做后,您将无法区分这两个board对象。所以改为使用:

import MyModule

然后就可以用MyModule.board来引用board模块中定义的全局了。

于 2013-03-25T15:19:23.063 回答
1

将全局变量board导入 Python 控制台一次后,它不会改变。尝试将该代码放入您的文件(作为打印语句)而不是在控制台中执行它,它应该可以工作。

于 2013-03-25T15:14:46.443 回答