Python verallgemeinert boolesche Operationen im Vergleich zu anderen Sprachen ein wenig. Bevor der "if"-Bedingungsoperator hinzugefügt wurde (ähnlich wie C's ?:
ternären Operator), wurden manchmal äquivalente Ausdrücke mit diesem Idiom geschrieben.
and
ist so definiert, dass der erste Wert zurückgegeben wird, wenn er boolesch-falsch ist, ansonsten wird der zweite Wert zurückgegeben:
a and b == a if not bool(a) else b #except that a is evaluated only once
or
gibt seinen ersten Wert zurück, wenn er boolesch-wahr ist, sonst seinen zweiten Wert:
a or b == a if bool(a) else b #except that a is evaluated only once
Wenn Sie den Stecker True
y False
para a
y b
in den obigen Ausdrücken sehen Sie, dass sie so funktionieren, wie Sie es erwarten würden, aber sie funktionieren auch für andere Typen, wie Integer, Strings usw.. Ganzzahlen werden als falsch behandelt, wenn sie Null sind, Container (einschließlich Strings) sind falsch, wenn sie leer sind, und so weiter.
Also protocol = secure and "https" or "http"
tut dies:
protocol = (secure if not secure else "https") or "http"
...der ist
protocol = ((secure if not bool(secure) else "https")
if bool(secure if not bool(secure) else "https") else "http")
Der Ausdruck secure if not bool(secure) else "https"
gibt "https" an, wenn sicher ist True
, sonst wird die (falsche) secure
Wert. Also secure if not bool(secure) else "https"
hat die gleiche Wahr-oder-Falschheit wie secure
selbst, sondern ersetzt boolean-true secure
Werte mit "https". Die äußere or
Teil des Ausdrucks bewirkt das Gegenteil - er ersetzt boolean-false secure
Werte mit "http", und berührt "https" nicht, weil es wahr ist.
Dies bedeutet, dass der allgemeine Ausdruck dies tut:
- wenn
secure
falsch ist, dann wird der Ausdruck als "http" ausgewertet
- wenn
secure
wahr ist, dann wird der Ausdruck als "https" ausgewertet
...das ist das Ergebnis, auf das andere Antworten hingewiesen haben.
Die zweite Anweisung dient lediglich der Formatierung von Zeichenketten - sie ersetzt jede der Tupel von Zeichenketten durch die Hauptzeichenkette "format", wo auch immer %s
erscheint.
0 Stimmen
Ich liebe diesen Python-Zuweisungstrick, wirklich praktisch! :-)
2 Stimmen
Ich versuche, diesen Trick zu vermeiden. Er ist eher verwirrend als praktisch.