реализация оператора урожая

Вы можете сделать:

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()
7
задан Mehrdad Afshari 12 April 2009 в 22:32
поделиться

3 ответа

yield работает путем внутреннего построения конечного автомата. Он сохраняет текущее состояние подпрограммы при выходе и возобновляет работу из этого состояния в следующий раз.

Вы можете использовать Reflector, чтобы увидеть, как это реализовано компилятором.

yield break используется, когда вы хотите остановить возвращающие результаты. Если у вас нет перерыва yield , компилятор примет один в конце функции (точно так же, как возврат ; оператор в нормальной функции)

11
ответ дан 6 December 2019 в 05:39
поделиться

Как говорит Мехрдад, он создает конечный автомат.

Помимо использования Reflector (еще одно отличное предложение), вы может найти полезной мою статью о реализации блока итераторов . Было бы относительно просто, если бы не было окончательно блоков - но они привносят целый дополнительный аспект сложности!

9
ответ дан 6 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: