2016-09-27 34 views
0

値を返すオプションも持つジェネレータ関数をどのように書くことができますか? Python 2では、ジェネレータ関数が値を返そうとすると、次のエラーメッセージが表示されます。 SyntaxError: 'return' with argument inside generatorジェネレータ関数Python 2の戻り値

ジェネレータを受信するかどうか指定する場所に関数を記述することはできますか?例えば

def f(generator=False): 
    if generator: 
     yield 3 
    else: 
     return 3 
+3

ジェネレータ関数または標準関数を呼び出すラッパー関数を書かないのはなぜですか? – Aidenhjj

+0

これは2つの機能でなければなりません。 – user2357112

+0

いいえ、何らかの理由で関数またはジェネレータの切り替えが可能な関数を書くことはできません。答えがあると感じたら、*答えを書く*。 – jonrsharpe

答えて

4

必須の読書:Understanding Generators in Python

キー情報:関数はジェネレータになり

yieldどこかで。

コードが解析されるとき、関数はジェネレータとしてマークされます。したがって、実行時に引き渡される引数に基づいて、関数の振る舞い(ジェネレータ/非生成器)を切り替えることは不可能です。