2017-07-05 7 views
1

私はルビーで次のようになりますシンプルな三項演算子記述しようとしています:この3進演算子の構文が無効なのはなぜですか?

alice += 1 if 0 > 1 else bob += 1

この三項演算子は、スロー:

0 > 1 ? alice+=1 : bob+=1

を、私はそれがこのようにPythonで書かれていbob+=1に無効な構文があります。なぜこれが起こっているのですか?2番目の演算子を最初の行と同じ行に実行させるにはどうすればよいですか?

+3

*式*のみではなく、*式*を3項演算子で書くことができます。 –

+3

'bob + = 1'は_statement_であり、_expression_ではありません。 – mgilson

+0

'bob + = 1'を式としてレンダリングするにはどうすればいいですか?そしてなぜ 'alice + = 1'は式ですが、' bob + = 1'は文ですか? – d00medman

答えて

3

3進構文はの式です。あなたはそれを1行として使用しようとしましたif-then-else。あなたはそれのような、式のRHSから来て、インクリメント値を選ぶことができます。

alice += 1 if bob > 1 else 0 

...しかし、あなたは次のように割り当てのターゲットを変更することはできません。 本当にがそうする必要がある場合は、LHS alice, bobにカスタムタプルを割り当てることができますが、それは過度のようです。ただ、最終的な実行コードが同じになり、そしてソースをより読みまま自然if声明

if 0 > 1: 
    alice += 1 
else: 
    bob += 1 

を使用しています。

+0

これは意味があります。だから、Pythonの三元はRubyとはまったく異なっていますか?ステートメントの評価よりもむしろ変数の割り当てに役立つようです。 Pythonは、このようなブール論理を効率的な方法で実行する能力が足りませんか? – d00medman

+0

「三項演算子」と呼ばれるものを持つほとんどの言語は、従来の[定義](https://en.wikipedia.org/wiki/Ternary_operation)を使用しています。 CやRubyなどの式指向言語では、完全な文を式として許可するオプションがあります。 PythonとCはそれほど遠くに行こうとしなかった。 Rubyはやった。 – Prune

+0

Pythonは論理パスにかなり対応しています。根拠文書には、三項演算子がこのように動作する理由が説明されている可能性があります。私はそれを探していない。 – Prune

関連する問題