Verwenden Sie den ternären Operator (formal bedingter Ausdruck ) in Python 2.5 +.
%Vor%Der ternäre Operator erwähnt ist nur von Python 2.5 verfügbar. Aus der WeekeePeedeea :
Obwohl es für einige verzögert worden war Jahre durch Unstimmigkeiten über die Syntax, a ternärer Operator für Python war als Python-Erweiterung genehmigt Vorschlag 308 und wurde dem 2.5 hinzugefügt Veröffentlichung im September 2006.
Pythons ternärer Operator unterscheidet sich von der allgemeine?: Operator in der Reihenfolge von seine Operanden; Die allgemeine Form ist
op1 if condition else op2
. Diese Form lädt ein, op1 als normal zu betrachten Wert und op2 als Ausnahmefall.Vor 2.5 könnte man das Hässliche benutzen Syntax
(lambda x:op2,lambda x:op1)[condition]()
, die auch dauert Sorge dafür, nur Ausdrücke auszuwerten die tatsächlich benötigt werden, um Nebenwirkungen vermeiden.
Ich benutze immer noch 2.4 in einem meiner Projekte und bin schon ein paar Mal darauf gestoßen. Die eleganteste Lösung, die ich dafür sehe, ist:
%Vor%Ich mag das, weil es einen klareren booleschen Test darstellt als die Verwendung einer Liste mit den Indexwerten 0 und 1, um Ihren Rückgabewert zu erhalten.
Sie könnten etwas wie:
verwenden %Vor%obwohl es nicht sehr pythonisch ist
(die anderen Optionen sind näher an C / PERL, aber das beinhaltet mehr Tupelmagie)
Ein schöner Python-Trick benutzt das:
%Vor%Er erstellt eine 2-gliedrige Liste, und der Boolesche Wert wird entweder 0 (falsch) oder 1 (wahr), wodurch das richtige Element ausgewählt wird. Nicht sehr gut lesbar, aber Pythonie:)
Tags und Links python