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'
wertet den Wert des Ausdrucks von links nach rechts in einem booleschen Kontext aus. Wenn alle Werte im booleschen Kontext wahr sind, wird der Wert zurückgegeben letzter Wert.
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 oder in booleschen Werten werden im Kontext von links nach rechts ausgewertet, genau wie und. 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 der erste wahre Wert wird gefunden, die restlichen Vergleichswerte werden ignoriert
3. und-oder:
und-oder kombiniert die beiden vorherigen Syntaxen und kann begründet werden.
>>> 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 von und-oder
>>> a="" >>> b="second" >>> (1 and [a] or [b]) [''] >>> (1 and [a] or [b])[0] '' >>>
Da [a] eine nicht leere Liste ist, wird 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') #''