Я думаю, что важно провести различие между функциями генератора и генераторами (результат функции генератора):
>>> def generator_function():
... yield 1
... yield 2
...
>>> import inspect
>>> inspect.isgeneratorfunction(generator_function)
True
вызовом generator_function не даст нормальногорезультат, он даже не выполнит никакого кода в самой функции, результатом будет специальный объект с именем generator :
>>> generator = generator_function()
>>> generator
<generator object generator_function at 0x10b3f2b90>
, поэтому он не является генераторомфункция, но генератор:
>>> inspect.isgeneratorfunction(generator)
False
>>> import types
>>> isinstance(generator, types.GeneratorType)
True
и функция генератора не является генератором:
>>> isinstance(generator_function, types.GeneratorType)
False
только для справки, фактический вызов тела функции произойдет при использовании генератора, например:
>>> list(generator)
[1, 2]
См. Также В python есть ли способ проверить, является ли функция «генератором», перед ее вызовом?