在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"?
我会尝试这样的事情:
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)
Range 对象不携带迭代状态。有一个常见的误解,认为range
返回生成器,但范围对象是惰性的、不可变的序列,而不是生成器。您无法通过查看范围来确定某个范围内的迭代状态。