Почему одна и та же функция в python-chess возвращает разные результаты? - PullRequest
0 голосов
/ 04 мая 2019

Я новичок в работе с 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.Как это возможно?Если я использую одну и ту же функцию, разве она не должна возвращать один и тот же результат каждый раз для одного и того же файла?Почему имя переменной имеет значение (я предполагаю, что это имеет значение), если языки программирования не изменились за одну ночь или где-то есть встроенная случайная функция?

1 Ответ

1 голос
/ 04 мая 2019

Единственный способ, которым это возможно, - это изменение некоторых данных.Это могут быть данные, которые 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)) или закрываете и снова открываете файл, поэтому он будет читать следующие доступные данные - т.е.следующая игра.

...