Когда я положил yield
в тело функции, очевидно. Но это не то, что я пытаюсь спросить. Учитывая две простые функции в интерактивном режиме интерпретатора:Как питон знает, когда нужно вернуть генератор?
def myGenerator():
yield 42
def myFunction():
return 42
Когда я исполняю как я вижу:
>>> myGenerator()
<generator object myGenerator at 0xb7bf511c>
>>> myFunction()
42
Но если проверить myGenerator
и myFunction
объекты, я не вижу ничего, на самом деле разные:
for attr in dir(myFunction):
print(attr, getattr(myFunction, attr)
производит материал, который выглядит так же, как myGenerator
. Есть ли какой-то волшебный бит, скрытый в недрах функционального объекта, который интерпретатор отделяет, чтобы определить, следует ли завершать вызов функции в качестве генератора? Или это сделано больше стиля декоратора, где наличие ключевого слова yield привело к тому, что объект был связан как 'myGenerator'
, который был обернут в какую-нибудь магию генератора? Или что-то другое...?
ответа здесь: http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained – manji