Heim  >  Artikel  >  Backend-Entwicklung  >  Eingehende Analyse von Pythons und/oder Rückgabewerten

Eingehende Analyse von Pythons und/oder Rückgabewerten

高洛峰
高洛峰Original
2016-10-17 16:17:46990Durchsuche

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')    #''



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn