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