2017-07-22 9 views
2

次のコードを整理するだけです。yield式を関数の引数にできないのはなぜですか?

yield関数をprint関数に移動しましたが、構文エラーが発生しました。私は、なぜyield式が以下のような関数の引数になることができないのだろうかと思っていますか? yieldが式のように働く場合、関数の引数としては大丈夫です。

def well_known_generator(): 
    print('start') 
    print(yield 100) 
    print(yield 200) 
    print(yield 300) 
    print('end') 

g = well_known_generator() 
print(next(g), g.send(None), g.send(None), g.send(None)) 

SyntaxError: invalid syntax (<ipython-input-58-bdb3007bb80f>, line 3) 
    File "<ipython-input-58-bdb3007bb80f>", line 3 
    print(yield 100) 
      ^
SyntaxError: invalid syntax 

答えて

7

あなたはyield ...周りの括弧の別のペアを追加する必要があります。

def well_known_generator(): 
    print('start') 
    print((yield 100)) 
    print((yield 200)) 
    print((yield 300)) 
    print('end') 

括弧はyield expression syntax一部です:

yield_atom  ::= "(" yield_expression ")" 

が、それはだとき、カッコはオプションです代入文または文式の式のみ:

yieldステートメントが代入ステートメントの右側で唯一の式である場合は、かっこは省略できます。

コール式(print(...)など)の中に、かっこは省略できません。

関連する問題