为什么 python-chess 中的相同函数返回不同的结果?

Why is the same function in python-chess returning different results?

我刚开始使用 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 文件中的(大概)第三个游戏。这怎么可能?如果我使用相同的函数,难道不应该 return 对同一个文件每次都得到相同的结果吗?为什么变量名很重要(我假设它很重要)除非编程语言在一夜之间改变了或者某处内置了一个随机函数?

唯一可能的方法是某些数据正在更改。这可能是 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)) 或关闭并重新打开文件,因此它将读取下一个可用数据 –即,下一场比赛。