0

我是使用 python-chess 的新手,我正在阅读官方文档。我注意到这个非常奇怪的事情,我无法理解。这是来自文档:

import chess.pgn

pgn = open("data/pgn/kasparov-deep-blue-1997.pgn")

first_game = chess.pgn.read_game(pgn)
second_game = chess.pgn.read_game(pgn)

因此,您可以看到完全相同的功能pgn.read_game()会导致出现两个不同的游戏。我尝试使用自己的pgn文件,果然first_game == second_game导致False. 我也试过third_game = chess.pgn.read_game()了,果然给了我pgn文件中的(大概)第三场比赛。这怎么可能?如果我使用相同的函数,它不应该每次都为同一个文件返回相同的结果吗?为什么变量名很重要(我假设它确实如此),除非一夜之间改变了编程语言或某处内置了随机函数?

4

1 回答 1

1

唯一可行的方法是某些数据正在发生变化。这可能是chess.pgn.read_game从其他地方读取的数据,也可能与您传入的对象有关。

在 Python 中,类文件对象存储它们在文件中的位置。如果他们没有,那么这段代码:

with open("/home/wizzwizz4/Documents/TOPSECRET/diary.txt") as f:
    line = f.readline()
    while line:
        print(line, end="")
        line = f.readline()

只会一遍又一遍地打印第一行。当从文件中读取数据时,除非您特别要求,否则 Python 不会再次向您提供该数据。

此文件中有多个游戏,一个接一个地存储。你每次都传入同一个文件,但你没有将读取光标重置到文件的开头(f.seek(0))或关闭并重新打开文件,所以它会读取下一个可用的数据——即下一个游戏.

于 2019-05-04T18:07:47.027 回答