Может ли генератор использоваться через полиморфизм - PullRequest
0 голосов
/ 05 июня 2018

Я даже не знаю, является ли это правильным способом, но недавно у меня возникли проблемы при попытке использовать метод из объекта, как в качестве движка карты (отображение замыкания на элементы итератора), так и в качествегенератор генератора.

Я, вероятно, гораздо проще объяснить это с помощью примера кода:

class maybe_generator():
    def __init__(self, doer):
        self.doer = doer

    def give(self):
        for i in [1,2,3]:
            self.doer(i)


def printer(x):
    print('This is {}'.format(x))
def gener(x):
    yield(x)

p = maybe_generator(printer)
p.give()

g = maybe_generator(gener)

print('Type of result is {}'.format(g.give()))

Вывод

This is 1
This is 2
This is 3
Type of result is None

Я бы ожидалДанный объект не будет иметь тип генератора вместо NoneType.Тогда мне интересно, как можно реализовать функцию, которая потенциально может генерировать генератор, или напрямую выполнить какой-либо эффект границы для итерируемого.

Заранее спасибо за вашу помощь

1 Ответ

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

Хорошо, я наконец-то нашел то, что искал.Наличие функции, которая работает и как механизм отображения, и как генератор, может быть возможно с некоторыми хитростями / хитростями, но в моем случае я хотел получить рекурсивный генератор.

Это можно легко сделать с помощьюключевое слово

доходность от

Код теперь выглядит примерно так:

class maybe_generator():
    def __init__(self, doer):
        self.doer = doer

    def give(self):
        for i in [1,2,3]:
            yield from self.doer(i)

def gener(x):
    yield(x)

g = maybe_generator(gener)
gen = g.give()
print('Type of result is {}'.format(gen))

for k in gen:
    print('value is {}'.format(k))

На самом деле также стоило взглянуть на этот расширенныйсерия курсов по генератору и сопрограммам: http://dabeaz.com/coroutines/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...