То, что вы ищете, это итератор. Например, этот действует как диапазон, но дает вам только нечетные числа:
class oddrange(object):
def __init__(self, first, lastPlusOne):
# Ensure start at first odd >= given start, store terminator.
self.__curr = first + 1 - first % 2
self.__term = lastPlusOne
def __iter__(self):
return self
def __next__(self):
# Terminate if range over, otherwise return current, calculate next.
if self.__curr >= self.__term:
raise StopIteration()
(cur, self.__curr) = (self.__curr, self.__curr + 2)
return cur
Вы можете увидеть это в действии с кодом вызова:
for i in oddrange(-5, 9): print(i, end = ' ')
print()
for i in oddrange(-3, 9): print(i, end = ' ')
print()
for i in oddrange(-4, 10): print(i, end = ' ')
print()
for i in oddrange(-4, 10): print(i, end = ' ')
print()
Это генерирует:
-5 -3 -1 1 3 5 7
-3 -1 1 3 5 7
-3 -1 1 3 5 7 9
-3 -1 1 3 5 7 9
Обратите внимание, что это не совместимо с Python 2, как и многие примеры в сети. Я думаю, что уже давно прошло время, мы все принимаем тот факт, что Python 2 готов, и продолжаем: -)
Если вам действительно нужно это нужно, вы можете просто добавить это в класс:
def next(self): return self.__next__()