Вы можете сделать:
def range_lister():
'''Example 5:10:2 -> [5,7,9]
'''
query = input('Please enter your range start:stop[:step]\n> ')
values = [int(q) for q in query.split(':')]
trange = list(range(*values))
print(trange)
range_lister()
yield
работает путем внутреннего построения конечного автомата. Он сохраняет текущее состояние подпрограммы при выходе и возобновляет работу из этого состояния в следующий раз.
Вы можете использовать Reflector, чтобы увидеть, как это реализовано компилятором.
yield break
используется, когда вы хотите остановить возвращающие результаты. Если у вас нет перерыва yield
, компилятор примет один в конце функции (точно так же, как возврат ; оператор
в нормальной функции)
Как говорит Мехрдад, он создает конечный автомат.
Помимо использования Reflector (еще одно отличное предложение), вы может найти полезной мою статью о реализации блока итераторов . Было бы относительно просто, если бы не было окончательно
блоков - но они привносят целый дополнительный аспект сложности!