Python - 如何访问 range() 返回的范围类型对象的当前状态?



在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返回生成器,但范围对象是惰性的、不可变的序列,而不是生成器。您无法通过查看范围来确定某个范围内的迭代状态。

相关内容

  • 没有找到相关文章

最新更新