Методы в выражении генератора: gi_running, gi_yieldfrom и т. Д. - PullRequest
2 голосов
/ 26 февраля 2020

Я создал следующую функцию генератора:

>>> def file_readlines(filepath):
...     f = open(filepath, 'r')
...     for line in f:
...         yield line
... 
>>> gen=file_readlines(filepath)
>>> next(gen)

Когда я проверяю методы генератора, он показывает следующее:

...'close', 'gi_code', 'gi_frame', 'gi_running', 'gi_yieldfrom', 'send', 'throw'`

throw, send и close задокументированы в Python выражениях , и я предполагаю, что code и frame похожи на объект stacktrace, но каковы gi_running и gi_yieldfrom? Как они используются?

1 Ответ

2 голосов
/ 26 февраля 2020

gi_running сообщает вам, выполняет ли интерпретатор в настоящее время инструкции из кадра генератора (gi_frame)

gi_yieldfrom - это итератор, из которого выдает генератор. Он был введен в 3.5, и вы можете прочитать билет улучшения здесь: https://bugs.python.org/issue24450

def yielder(gen):
    yield from gen

x = range(5)  
g = yielder(x)

print(g.gi_yieldfrom) # None
next(g) # delegate to the other iterator
print(g.gi_yieldfrom) # <range_iterator object at 0x0000026A0D72C830>
list(g) # exhaust iterator
print(g.gi_yieldfrom) # None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...