Dies ist ein Memorandum, weil ich es zum ersten Mal gesehen habe, als ich den Tutorial-Code studiert habe (ich habe Click studiert).
Da der Boolesche Operator in Python den Wert des Vergleichs und nicht den Booleschen Wert zurückgibt,
>>> def test(flag=True):
... print 'flag: %s' % (flag and 'on' or 'off')
...
Wenn du es machst
>>> test(True)
flag: on
>>> test(False)
flag: off
Es sieht aus wie. Beachten Sie, dass und
und oder
hier Boolesche Operatoren sind, keine Vergleichsoperatoren.
Wie Sie im Abschnitt Boolesche Operatoren der Python-Bibliotheksreferenz sehen können, sind die Operatoren und
,` oder "und" nicht "werden in aufsteigender Reihenfolge der Priorität ausgewertet, wie in der folgenden Tabelle gezeigt.
Arithmetik td> | Ergebnis td> |
x oder y td> | y, wenn x falsch ist, x td> andernfalls |
x und y td> | x, wenn x falsch ist, andernfalls y td> |
not x | True, wennx false ist, andernfalls False td> |
Daher wurden nicht leere Zeichenfolgen immer als "True" bewertet
Wenn das Flag "True" ist:
(Weil der linke Begriff "True" ist)
-> 'on' or 'off'
(Weil die Zeichenfolge "wahr" ist)
-> 'on'
Wenn das Flag "False" ist:
(Weil der linke Begriff "Falsch" ist)
-> False or 'off'
(Weil der linke Begriff "Falsch" ist)
-> 'off'
Es war.
Es war erfrischend zu wissen, was los war. Es sieht erfrischend aus und sieht vielleicht schick aus.
Anders ist es jedoch, wenn ich gefragt werde, ob ich in Zukunft so schreiben werde. Ich würde das ehrlich schreiben.
>>> def test(flag=True):
... print 'flag: %s' % ('on' if flag else 'off')
Übrigens ist dies keine inklusive Notation, es scheint ein ternärer Operator zu sein, der ab Version 2.5 implementiert wurde, aber es sieht immer noch wie Python aus, also ist dies besser.
Außerdem gibt es im ersten Beispiel eine Einschränkung, dass der Teil der Zeichenkette etwas enthalten muss, das jedes Mal "Wahr" wird. In einigen Fällen kann es ein schwerwiegender Fehler sein, die Auswertung der zugewiesenen Elemente einzuschränken. Ich denke, es ist sicher, mit dem ternären Operator zu schreiben.
Referenz
Recommended Posts