2016-08-11 14 views
1

次のpython if文を1行に書くことができるかどうかは疑問です。また、私は下のエラーを取得しています理由を知りたい:if文を使ったPython oneliner

python -c 'a=1; if True: print a; else: a=a+1' 

    File "<string>", line 1 
    a=1; if True: print a; else: a=a+1 
     ^
SyntaxError: invalid syntax 
+2

エラーメッセージは表示されませんでしたが、おそらく 'SyntaxError'です。そして、いいえ、すべてを1行に入れることはできません。 1行に同じ意味のコードを書くことはできますが、同じ制御構造を使用することはできません。そして、なぜあなたはしたいですか? –

+0

exec( 'a = 1 \ nif True:\ n \ tprint a \ nelse:\ n \ t a + = 1'); =)(スマイリーに注意してください) –

+0

1行に同じ意味を持つコードは 'プリント1 '。 –

答えて

5

のみsimple statements can appear in a semicolon-separate statement list

stmt_list  ::= simple_stmt (";" simple_stmt)* [";"] 

if文は複合文なので、それを含めるために無効な構文です。

セミコロンで区切られたリストに複合文を入力すると、あいまいさが発生します。これは有効な構文です:conditionがtrueの場合、どちらの割り当てがだけ実行され

if condition: a = 1; b = 1 

、これはほとんどの人が直感的に文を読んでいました方法です。我々は

c = 1; if condition: a = 1; b = 1 

を許可された場合には、b = 1if文の一部であるかどうか、コードの読者のために不明瞭になるでしょう。

Pythonはインデントを使用してコードスイートを区切ります。インデントをセミコロン区切りのステートメントリストで使用することはできません。

+0

私が探していたもの.. – Maroun

+0

これはインデントだけではなく、これも無効です: 'a = 1; print(a)if true else a = a + 1' –

+0

@Chris_Rands:これは完全に無関係の理由で無効です。合意式 'xは条件else y 'が式であり、' x'と 'y'も式でなければなりません。代入はPythonの式ではありません(Python 2では 'print(a)'もありません)。 –