首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-象棋-函数运行时全局变量更改

python-象棋-函数运行时全局变量更改
EN

Stack Overflow用户
提问于 2017-07-23 19:57:29
回答 1查看 101关注 0票数 0

我对Python的作用域是如何工作的感到困惑。

代码语言:javascript
复制
x = 1

def do(y):
    y = y * 2
    print y

print x
do(x)
print x

上面的代码产生了这个输出:

代码语言:javascript
复制
1
2
1

全局变量保持不变,但在函数中,局部变量输出正确的更改值。

但是,在这个python-chess版本中,我运行如下:

代码语言:javascript
复制
import chess
board = chess.Board()

def do(b):
    b.push(list(b.legal_moves)[0]) #picks the first legal move
    return b.fen()

print board.fen()
print do(board)
print board.fen()

它产生这样的输出:

代码语言:javascript
复制
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
rnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R b KQkq - 1 1
rnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R b KQkq - 1 1

函数运行后,全局变量board 意外地发生了变化(至少对我来说是这样)。

我认为您希望通过使用function creates a local variable instead of modifying the global variable - it seems you even need to imply specifically关键字来更改它。它似乎适用于我使用的简单乘法示例,可能是因为python提供的.push()方法?

在运行函数时如何保留全局变量的值?

在这种情况下,我想要的输出应该是:

代码语言:javascript
复制
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
rnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R b KQkq - 1 1
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
EN

回答 1

Stack Overflow用户

发布于 2017-07-23 20:05:11

我的猜测是,因为"board“是某种对象,python隐式地将对象的引用传递给函数,而不是复制它。如果你通过积分类型,它很可能只是复制。Google "python对象通过引用传递“并阅读您发现的内容。这应该会给它一些启示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45269355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档