Предположим, что у меня есть две функции:
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, и мне интересно, легко ли получить эту информацию.
Спасибо!