все Python 3inspectфункция
inspect.isgenerator()
корутины и генераторы
Проверяет, что объект — генератор: результат вызова функции с yield или генераторное выражение.
Синтаксис
inspect.isgenerator(object) -> bool
Генератор — частный случай итератора, а не синоним: iter([]), map() и range() дают False. Чтобы спросить «можно ли пройти next()», нужен isinstance(x, collections.abc.Iterator). Проверка генератора нужна, когда важны его особые методы send() и throw() или то, что он одноразовый: второй проход по исчерпанному генератору молча ничего не даёт.
Примеры
import collections.abc, inspect
def gen():
yield 1
g = gen()
print(inspect.isgenerator(g), inspect.isgenerator(x for x in [])) # → True True
print(inspect.isgenerator(iter([])), inspect.isgenerator(range(3))) # → False False
print(isinstance(iter([]), collections.abc.Iterator)) # → True
print(list(g), list(g)) # → [1] []
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности