все 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Сообщить о неточности