Python 可重用无界范围

Python 可重用无界范围,python,iterable,Python,Iterable,这里有关于无限范围的问题,所有人都推荐itertools.count。但是,range有一个功能,count不能重复使用 a = range(100) # Prints 0 1 2 3 for i in a: print(i) if i >= 3: break # Prints 0 1 2 3 for i in a: print(i) if i >= 3: break from itertools import c

这里有关于无限
范围的问题,所有人都推荐
itertools.count
。但是,
range
有一个功能,
count
不能重复使用

a = range(100)

# Prints 0 1 2 3
for i in a:
    print(i)
    if i >= 3:
        break

# Prints 0 1 2 3
for i in a:
    print(i)
    if i >= 3:
        break

from itertools import count
b = count(0)

# Prints 0 1 2 3
for i in b:
    print(i)
    if i >= 3:
        break

# Prints 4, does not use a fresh count(0)
for i in b:
    print(i)
    if i >= 3:
        break

有没有一种方法可以重用
itertools.count
或以其他方式获得一个可重用/重新启动的无限iterable?

根本问题是
range
是一个
iterable
count
是一个
迭代器
Iterator
s是具有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\uuuuuuuuuuuu\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\uuuuuuuuuuuuuuuuuu

一种解决方案是只需创建自己的
Iterable
版本的
count
,只要调用它的
\iter\uuu
方法,它就会简单地返回
itertools.count

from itertools import count

class Count:
    def __init__(self, start=0):
        self.start = start

    def __iter__(self):
        return count(self.start)

基本问题是
range
Iterable
count
迭代器
Iterator
s是具有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\uuuuuuuuuuuu\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\uuuuuuuuuuuuuuuuuu

一种解决方案是只需创建自己的
Iterable
版本的
count
,只要调用它的
\iter\uuu
方法,它就会简单地返回
itertools.count

from itertools import count

class Count:
    def __init__(self, start=0):
        self.start = start

    def __iter__(self):
        return count(self.start)
是的,请看这个答案:是的,请看这个答案: