Heim > Artikel > Backend-Entwicklung > Eingehende Analyse von Pythons und/oder Rückgabewerten
In Python führen und/oder boolesche Logik aus, wie Sie es erwarten würden, aber sie geben keinen booleschen Wert zurück, sondern einen der Werte, mit denen sie tatsächlich verglichen werden.
1 und:
>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'
von links nach rechts in einem Booleschen Wert context Der Wert des rechten Kalkülausdrucks. Wenn alle Werte im booleschen Kontext wahr sind, gibt und den letzten Wert zurück.
Wenn ein Wert im booleschen Kontext falsch ist, dann gibt und den ersten falschen Wert zurück
2. oder:
>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {} {} >>> 0 or 'a' or 'c' 'a'
Bei Verwendung von or werden Werte in einem booleschen Kontext von links nach rechts ausgewertet, genau wie and. Wenn ein Wert wahr ist oder dieser Wert sofort zurückgegeben wird
Wenn alle Werte falsch sind oder der letzte falsche Wert zurückgegeben wird
Beachten Sie, dass oder immer eine Ausdrucksauswertung in einem booleschen Kontext durchführt, bis wird der erste wahre Wert gefunden, dann werden die restlichen Vergleichswerte
ignoriert. 3. und-oder:
and-or kombiniert die beiden vorherigen Syntaxen, nur zur Begründung.
>>> a='first' >>> b='second' >>> 1 and a or b 'first' >>> (1 and a) or b 'first' >>> 0 and a or b 'second' >>> (0 and a) or b 'second' >>>
Diese Syntax ähnelt dem bool ? a : b-Ausdruck in der C-Sprache. Der gesamte Ausdruck wird von links nach rechts ausgewertet, sodass der and-Ausdruck zuerst ausgewertet wird. 1 und „erster“ werden zu „erster“ ausgewertet, dann wird „erster“ oder „zweiter“ zu „erster“ ausgewertet.
0 und „erster“ ergeben „Falsch“, dann 0 oder „zweiter“ ergeben „zweiter“.
und-oder wird hauptsächlich verwendet, um den ternären Operator bool?a:b zu imitieren, das heißt, wenn der Ausdruck bool wahr ist, wird a genommen, andernfalls wird b genommen.
Der Und-Oder-Trick, der bool- und a- oder b-Ausdruck, funktioniert nicht wie der C-Sprachausdruck bool a : b, wenn a in einem booleschen Kontext als falsch ausgewertet wird.
4. Sichere Verwendung und-oder
>>> a="" >>> b="second" >>> (1 and [a] or [b]) [''] >>> (1 and [a] or [b])[0] '' >>>
Da [a] eine nicht leere Liste ist, kann sie niemals falsch sein. Auch wenn a 0 oder '' oder ein anderer falscher Wert ist, ist Liste [a] wahr, weil sie ein Element enthält.
Ein verantwortungsbewusster Programmierer sollte die Und-Oder-Technik in eine Funktion kapseln:
def choose(bool,a,b): return (bool and [a] or [b])[0] print choose(1,'','second') #''