Python Glossary English

все Python 3typesпонятие

types.GeneratorType

генераторы и корутины

Тип объекта-генератора — того, что возвращает вызов функции с yield или генераторное выражение. Саму функцию с yield он не описывает.

Синтаксис

isinstance(obj, types.GeneratorType)

Главная путаница — между генераторной функцией и генератором: isinstance(gen_func, GeneratorType) даёт False, а isinstance(gen_func(), GeneratorType) — True. Второе: range, map и zip — тоже ленивые итераторы, но не генераторы, так что проверка на GeneratorType их отбросит. Если коду нужно «что-то перебираемое», проверяйте collections.abc.Iterator или Iterable — это шире и честнее.

Примеры

import types
def count():
    yield 1
print(isinstance(count, types.GeneratorType))  # → False
print(isinstance(count(), types.GeneratorType))  # → True
print(isinstance((x for x in 'ab'), types.GeneratorType))  # → True
print(isinstance(map(str, [1]), types.GeneratorType))  # → False

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности