2つの関数があるとしましょう:Pythonでは、関数を呼び出す前に関数が "ジェネレータ関数"であるかどうかをチェックする方法はありますか?
def foo():
return 'foo'
def bar():
yield 'bar'
最初の関数は通常の関数であり、2つ目はジェネレータ関数です。今私はこのようなものを書いておきたいと思います:
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文を持っていることを知っていると推測し、その情報を簡単に取得できるかどうか疑問に思う。
ありがとう!
それは注意することは便利です、その関数は 'yield'文が含まれている場合は、'リターン'関数内の文は引数を持つことができません。ジェネレータを終了させるだけの 'return'でなければなりません。良い質問! –
良い点、 'goo()'は有効ではありませんが、ここでは少なくとも(Python 2.6.2)です。 – Carlos
現在の読者への注:@GregHewgillのコメントはもはや正しいものではなく、今度は(StopIterationの値attrに渡される)引き数を返すことができます – wim