2016-08-11 6 views
1

Ich frage mich, ob es möglich ist, die folgende Python If-Anweisung in einer Zeile zu schreiben. Ich würde auch gerne wissen, warum ich die Störung erhalten unten:Python oneliner mit if-Anweisung

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

Sie haben die Fehlermeldung nicht eingefügt, aber es ist wahrscheinlich ein 'SyntaxError'. Und nein, du kannst das alles nicht in eine einzige Zeile schreiben. Sie können Code mit derselben Bedeutung in einer einzelnen Zeile schreiben, aber nicht die gleichen Kontrollstrukturen verwenden. Und warum möchtest du? –

+0

exec ('a = 1 \ nif Wahr: \ n \ tdruck a \ nelse: \ n \ t a + = 1'); =) (bitte notieren Sie den Smiley) –

+0

Code mit der gleichen Bedeutung in einer einzelnen Zeile wäre ' Druck 1'. –

Antwort

5

Nur simple statements can appear in a semicolon-separate statement list:

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

Eine if Anweisung ist eine zusammengesetzte Anweisung, es ist also ungültige Syntax es zu schließen.

Wenn Sie zusammengesetzte Anweisungen in einer durch Semikola getrennten Liste zulassen, führt dies zu Mehrdeutigkeiten. Dies gilt Syntax:

if condition: a = 1; b = 1 

Beide Zuweisungen nur dann ausgeführt werden, wenn die condition wahr ist, und das ist, wie die meisten Menschen intuitiv die Aussage lesen würde. Wenn wir

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

wäre es für die Leser des Codes unklar geworden, ob der b = 1 Teil der if Aussage ist oder nicht.

Python verwendet Einrückung, um Code-Suites zu begrenzen, und Sie können Einrückung nicht in einer durch Semikola getrennten Anweisungsliste verwenden.

+0

Was ich gesucht habe .. – Maroun

+0

Es ist nicht nur die Einrückung, das ist auch ungültig: 'a = 1; print (a) wenn True sonst a = a + 1' –

+0

@Chris_Rands: Dies ist aus völlig anderen Gründen ungültig. Der confitional Ausdruck 'x wenn Bedingung else y 'ist ein Ausdruck, und' x' und 'y' müssen Ausdrücke auch sein. Eine Zuweisung ist kein Ausdruck in Python (und Python 2 ist auch kein 'print (a)'). –

Verwandte Themen