Wenn Sie verwenden any(lst)
, sehen Sie, dass dies lst
die iterable ist, die eine Liste einiger Elemente ist. Wenn es enthalten würde [0, False, '', 0.0, [], {}, None]
(von denen alle boolesche Werte haben False
), any(lst)
wäre es False
. Wenn lst
auch eines der folgenden [-1, True, "X", 0.00001]
Elemente enthalten wäre (von denen alle ausgewertet werden True
), any(lst)
wäre dies der Fall True
.
In dem von Ihnen geposteten Code x > 0 for x in lst
handelt es sich um eine andere Art von iterierbarem Code , der als Generatorausdruck bezeichnet wird . Bevor Generatorausdrücke zu Python hinzugefügt wurden, hätten Sie ein Listenverständnis erstellt , das sehr ähnlich aussieht, jedoch mit den umgebenden []
: [x > 0 for x in lst]
. Aus dem lst
Inhalt [-1, -2, 10, -4, 20]
würden Sie diese verstandene Liste erhalten : [False, False, True, False, True]
. Dieser interne Wert würde dann an die any
Funktion übergeben, die zurückkehren würde True
, da mindestens ein True
Wert vorhanden ist.
Bei Generatorausdrücken muss Python diese interne Liste von True(s)
und nicht mehr erstellen. False(s)
Die Werte werden generiert, wenn die any
Funktion die vom Generatorausdruck einzeln generierten Werte durchläuft. Und da es any
Kurzschlüsse gibt, hört es auf zu iterieren, sobald es den ersten True
Wert sieht . Dies ist besonders praktisch, wenn Sie lst
mit etwas wie erstellt haben lst = range(-1,int(1e9))
(oder xrange
wenn Sie Python2.x verwenden ). Auch wenn dieser Ausdruck eine Milliarde Einträge erzeugt über wird, any
hat nur bis zum dritten Eintrag gehen , wenn es um bekommt 1
, die auswertet True
für x>0
und so any
zurückkehren kann True
.
Wenn Sie ein Listenverständnis erstellt hätten , hätte Python zuerst die Liste mit Milliarden Elementen im Speicher erstellen und diese dann an übergeben müssen any
. Wenn Sie jedoch einen Generatorausdruck verwenden , können Sie die integrierten Funktionen von Python wie any
und all
früh ausbrechen lassen, sobald ein True
oder False
-Wert angezeigt wird.
any(x > 0 for x in list)
ist auch, dass dies nur ein syntaktischer Zucker für istany((x > 0 for x in list))
.None
der Liste der Elemente hinzufügen , die boolesche Werte vonFalse
any
.def b(x): return x; print b(x > 1 for x in xs) # prints <generator object ..
Es werden nur mehrere Codezeilen zu einer reduziert. Sie müssen keinen langen Code schreiben wie:
quelle
(x > 0 for x in list)
In diesem Funktionsaufruf wird ein Generatorausdruck erstellt, z.Welche
any
verwendet, und Kurzschlüsse bei der Begegnung mit dem ersten Objekt, das ausgewertet wirdTrue
quelle
Es ist, weil das iterable ist
Beachten Sie, dass
x > 0
entwederTrue
oder zurückgegeben wirdFalse
und Sie daher eine Iterable von Booleschen Werten haben.quelle
Einfach gesagt, any () funktioniert so: Je nachdem, ob ein erfüllender Wert in der Liste gefunden wird, wird true zurückgegeben, andernfalls false.
quelle