2016-05-18 6 views
0

Die Linie ist:Wie funktioniert dieser komplexe Ausdruck mit OR?

key1 = dictionary_name.get('key1', ['']) [0] or 0 

Ich verstehe die get Methode und den Standardwert, aber ich habe keine Ahnung, was mit dem or geschieht nach dem ). Die Zeile scheint die Funktion zu haben, den Wert eines Schlüssels aus einem Verzeichnis zu lesen und 0 zurückzugeben, wenn der Wert ' ' ist.
Aber wie funktioniert die Linie, vor allem die Boolean or, im Detail?

+1

Wenn das nullte Element des Ergebnisses von 'get' falsch ist, wird das Ergebnis '0' sein. Ansonsten verwende dieses Element. – jonrsharpe

+1

'or' ist ein fauler Operator. Wenn der erste Gegenstand truthy ist, wird er das zurückgeben. Andernfalls wird der zweite Wert zurückgegeben. –

+0

... ahhh, jetzt verstehe ich ... vielen Dank! – braasch

Antwort

0

Die or ist Kurzschluss und immer gibt einen der beiden Operanden zurück.
die or Entfernen dieser Code wäre äquivalent:

temp = dictionary_name.get('key1', ['']) [0] 
if temp: 
    key1 = temp 
else: 
    key1 = 0 

Hinweis: key1 ist eine seltsame Variablenname für einen dict Wert.

+0

'dict.get (key, default = None)', weil 'None' ebenfalls falsch ist? – martijnn2008

+0

@ martijnn2008 Keine ist nicht indexierbar. Deshalb ist der Standardwert eine Liste, die nur einen falschen Wert enthält. –

+0

vielen Dank ... ... der Code nach der Klammer funktioniert als der andere Teil ... ... aber was ist die Verwendung von [0] oder 0? – braasch

0

die docs zu zitieren:

Der Ausdruck x or y erste auswertet x; Wenn x wahr ist, wird der Wert zurückgegeben. Andernfalls wird y ausgewertet und der resultierende Wert wird zurückgegeben.

[...]

Beachten Sie, dass weder and noch or den Wert beschränken und geben sie zu False und True zurückzukehren, sondern das letzte Argument ausgewertet zurück.