Как получить доступ к текущему состоянию объекта типа диапазона, возвращаемого range ()? - PullRequest
0 голосов
/ 15 сентября 2018

В Python 3, если я не ошибаюсь, объект диапазона диапазона, созданный range (), генерирует числа по требованию для цикла for способом, который чем-то похож на генератор.

Мне интересно, возможно ли получить доступ к текущему значению, которое объект диапазона дает циклу for (я запускаю поток в другом месте, чтобы отслеживать прогресс в цикле for). Например, в:

range_obj = range(0, 10000)
for i in range_obj:
    print(i) 

Допустим, я на 100-й итерации, в которой будет напечатано "99", и у меня есть доступ только к переменной range_obj. Есть ли какой-нибудь метод или переменная, которую я могу вызвать с помощью range_obj (например, в порядке range_obj.X), чтобы получить число "99"? Если не метод или переменная, есть ли какой-нибудь возможный способ для меня получить доступ к этому номеру "99" вне цикла?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Я бы попробовал что-то вроде этого:

class MyRange:

    def __init__(self, *params):
        self.range_iterator = iter(range(*params))
        self.sentinel = None

    def __iter__(self):
        return self

    def __next__(self):
        self.sentinel = next(self.range_iterator)
        return self.sentinel

r = MyRange(0, 1000)

for i in r:
    print(r.sentinel)
0 голосов
/ 15 сентября 2018

Объекты Range не имеют состояния итерации. Существует распространенное заблуждение, что range возвращает генератор, но объекты диапазона являются ленивыми, неизменными последовательностями , а не генераторами. Вы не можете определить состояние итерации по диапазону, посмотрев на диапазон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...