Ich muss einige Dinge nur drucken, wenn eine boolesche Variable auf gesetzt ist True
. Also, nachdem sie bei der Suche das habe ich versucht , mit einem einfachen Beispiel:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
Das Gleiche, wenn ich schreibe print a if b==True
.
Was fehlt mir hier?
python
if-statement
inline
Ricky Robinson
quelle
quelle
Antworten:
Python hat keine abschließende
if
Anweisung .if
In Python gibt es zwei Arten von :if
Aussage:if
Ausdruck (eingeführt in Python 2.5)Und beachten Sie, dass beide
print a
undb = a
Aussagen sind. Nur dera
Teil ist ein Ausdruck. Also wenn du schreibstes bedeutet
und ähnlich, wenn Sie schreiben
es bedeutet
Was würde es nun drucken / zuweisen, wenn es keine
else
Klausel gäbe ? Der Druck / die Zuordnung ist noch da .Und beachten Sie, dass Sie die reguläre
if
Anweisung immer in eine einzelne Zeile schreiben können, wenn Sie nicht möchten, dass sie vorhanden ist , obwohl sie weniger lesbar ist und es keinen Grund gibt, die zweizeilige Variante zu vermeiden.quelle
if condition: statement
das funktioniert bei mehrzeiligen Anweisungen nicht.if
, warum funktioniert das dann :print [i for i in range(10) if i%2]
? Ich wünschte, sie würden es außerhalb des Verständnisses zulassen ...for
zwischen ihnen.Inline if-else EXPRESSION muss immer eine else-Klausel enthalten, z.
Wenn Sie Ihren Variablenwert 'a' unverändert lassen möchten, indem Sie den alten Wert 'a' angeben (andernfalls wird dies weiterhin von Syntaxanforderungen verlangt):
Dieser Code lässt a unverändert, wenn b zu False wird.
quelle
print a if b
else a
wäre dann besserelse 0
if b: print a
""
oderNone
, siehe Details in anderen Antworten).Die 'else'-Anweisung ist obligatorisch. Sie können solche Dinge tun:
BEARBEITEN:
Abhängig von Ihren Anforderungen können Sie auch Folgendes versuchen:
quelle
Wenn Sie nicht möchten,
from __future__ import print_function
können Sie Folgendes tun:Welche Drucke:
Wenn Sie
from __future__ import print_function
Python 3 oder höher nicht ablehnen oder verwenden:Das Hinzufügen des else ist die einzige Änderung, die Sie vornehmen müssen, um Ihren Code syntaktisch korrekt zu machen. Sie benötigen das else für den bedingten Ausdruck (das "in line if else-Block").
Der Grund, warum ich andere im Thread nicht verwendet habe
None
oder0
mag, ist, dass die VerwendungNone/0
das Programm zuprint None
oderprint 0
in den Fällen veranlassen würde, in denen dies der Fallb
istFalse
.Wenn Sie zu diesem Thema lesen möchten, habe ich einen Link zu den Versionshinweisen für den Patch eingefügt, mit dem diese Funktion zu Python hinzugefügt wurde.
Das obige 'Muster' ist dem in PEP 308 gezeigten Muster sehr ähnlich:
Insgesamt denke ich, dass dies ein vernünftiger Weg ist, dies zu erreichen, aber Sie können nicht mit der Einfachheit argumentieren:
quelle
print ""
immer noch etwas gedruckt wird: eine leere Zeile.end
Argument in wirdprint
nur in Python 3.x angezeigt, oder?from __future__ import print_function
Seit 2.5 können Sie das Äquivalent des ternären bedingten Operators "?:" Von C verwenden. Die Syntax lautet:
Ihr Beispiel ist also in Ordnung, aber Sie müssen einfach hinzufügen
else
, wie:quelle
print ''
weiterhin eine neue Zeile gedruckt wird, was in der Antwort von Noelkd vermieden wird.Sie können verwenden:
Genauso gut können Sie weitermachen wie:
Beispiel aus der realen Welt:
quelle
Dies kann mit der Formatierung von Zeichenfolgen erfolgen . Es funktioniert mit der% -Notation sowie mit .format () und f-Strings (neu in 3.6).
oder
oder
quelle
print a if b else ""
. Genau das tut Noelkds Antwort.print "",
angezeigt, die mit (Doppelpunkt) für Python2 undprint("", end="")
Python3 vermieden werden kann.Für Ihren Fall funktioniert dies:
Edit: Wie funktioniert das?
In der Frage
Also auswerten
führt zu
welches zugeordnet ist
a
.Wenn
b == False?
,b or 0
würde den zweiten Operanden auswerten ,0
die zugeordnet werden sollten würdena
.quelle
Versuche dies . Es könnte dir helfen
quelle
Sie sind einfach zu kompliziert.
quelle
if DEBUG: print something
Sie benötigen immer
else
eine Inline, wenn:Aber ein einfacher Weg wäre es
a = int(b)
.quelle
a = int(bool(b))
.Warum schreibst du nicht einfach:
quelle
hmmm, du kannst es mit einem Listenverständnis machen . Dies wäre nur dann sinnvoll, wenn Sie eine echte Reichweite hätten. Aber es macht den Job:
oder nur diese beiden Variablen verwenden:
quelle