2013-07-12 9 views
7

私はそれがいくつかの悩まされていることを知っていますが、私は単純なif/elseステートメントを読みやすくする(私は思う)ように、Pythonの三項演算子を使うのが好きです。いずれにせよ、私はこれを行うことができないことが判明しました:Pythonの3進演算子は複数の値を返すことはできませんか?

>>> a,b = 1,2 if True else 0,0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

私は三項演算子の動作考え出し方法は、それは基本的に次のように構築することである:

if True: 
    a,b = 1,2 
else: 
    a,b = 0,0 

誰かが理由を説明してもらえ私の最初のコードサンプルは動作しませんか?また、ある場合は、条件付きで複数の変数を割り当てるために1ライナーを用意しますか?

答えて

12

3つの値としてその解析は次のとおり

1, 
2 if True else 0, 
0 

したがって、式の左側の二つの値以上である三つの値(1,2,0)、となります。

試してみてください。

a,b = (1,2) if True else (0,0) 
+1

良い老いた 『コンマ演算子は、条件付き三元よりも低い優先順位を持っている』 ...でも、Cで動作します.. –

+0

ああ、ありがとう! – Valdogg21

+0

@ Valdogg21あなたは大歓迎です:) – Doorknob

2

これは、演算子の優先順位の問題です。考えてみましょう:

>>> 1,2 if True else 0,0 
(1, 2, 0) 

必要に応じて括弧を追加し、あなたはそれが動作するようになります:

(1,2) if True else (0,0) 
関連する問題