Сопрограмма против объекта? - PullRequest
0 голосов
/ 05 июня 2018

Зачем использовать сопрограмму, которая является функцией, поддерживающей внутреннее состояние между вызовами, вместо объекта, который также имеет внутреннее состояние?

1 Ответ

0 голосов
/ 05 июня 2018

Обоснование довольно драматично, если вы привыкли к интерфейсу Iterator в Java.

Примите во внимание следующее:

def my_generator():
    yield "first"
    yield "second"
    yield from some_list()

Чтобы записать это как класс:

class MyIterator:
    def __init__(self):
        self.place = 0

    def __next__(self):
        if self.place == 0:
            result = "first"
            self.place += 1
        elif self.place == 1:
            result = "second"
            self.place += 1
            self.list_iter = iter(some_list())
        else:
            result = next(self.list_iter)  # Throws implicitly
        return result

Обновление вашего состояния - это просто шаблон, и если вы можете заставить компилятор / интерпретатор написать свой шаблон для вас, почему бы и нет?

...