Предположим, что у меня есть две функции:
def foo():
return 'foo'
def bar():
yield 'bar'
Первая - это нормальная функция, а вторая - функция генератора. Теперь я хочу написать что-то вроде этого:
def run(func):
if is_generator_function(func):
gen = func()
gen.next()
#... run the generator ...
else:
func()
Как будет выглядеть простая реализация is_generator_function()
? Используя пакет types
, я могу проверить, является ли gen
генератором, но я хочу сделать это перед вызовом func()
.
Теперь рассмотрим следующий случай:
def goo():
if False:
yield
else:
return
Вызов goo()
вызывает генератор. Я предполагаю, что парсер python знает, что функция goo()
имеет инструкцию yield, и мне интересно, легко ли получить эту информацию.
Спасибо!