"existiert" Schlüsselwort in Python?

8

Ich habe kürzlich das folgende Beispiel für Pythons für ... else gemacht:

%Vor%

Ein Mitschüler sagte mir, dass diese Aufgabe mit Scala wie folgt erledigt werden kann:

%Vor%

Was faul ausgewertet wird.

Gibt es in Python etwas Ähnliches wie das exist-Schlüsselwort? Oder gibt es eine PEP dafür?

    
Martin Thoma 09.06.2012, 06:14
quelle

2 Antworten

21
%Vor%

Python hat auch all() , das jede Sequenz durchläuft und True zurückgibt, wenn alle Elemente den Wert true haben.

any() und all() haben beide eine Kurzschlussauswertung: Wenn any() ein Element findet, das true auswertet, stoppt es und gibt True zurück; und wenn all() ein Element findet, das false auswertet, stoppt es und gibt False zurück.

Beide sind insofern "faul", als sie die Python-Iteration verwenden, um Werte einzeln zu ziehen. Zum Beispiel:

%Vor%

Dies wird iterieren, bis eine Nicht-Primzahl gefunden wird, und dann False zurückgeben. Es druckt die Zahlen als Nebeneffekt, damit Sie sehen können, wie es funktioniert. Ich habe es gerade versucht und habe:

%Vor%

P.S. Ich ging zu einem Vortrag bei einer Python-Konferenz, und der Sprecher erwähnte, dass er any() häufig als sehr effizienten Weg benutzt, um eine Schleife zu machen. Eine for -Schleife bindet die Schleifenvariable für jede Schleife neu, aber any() tut dies nicht; es überprüft nur die Werte. Also, wenn Sie any() mit einer Funktion verwenden, die immer None oder einen falschen Wert zurückgibt, wird es bis zum Ende der Sequenz durchlaufen, und nach diesem Typ ist es der schnellste Weg in Python, es zu tun. (Und wenn Ihre Funktion einen Wert zurückgibt, der nicht None ist und nicht falsch ist, können Sie all() für denselben Trick verwenden. Die einzige Zeit, die es nicht funktioniert, ist, wenn die Funktion manchmal einen wahren Wert zurückgibt es gibt einen falschen Wert zurück, aber Sie können es immer zwingen zu arbeiten:

%Vor%

P. P. S. Lassen Sie uns all() verwenden, um isPrime() neu zu schreiben! Ich werde den Namen in is_prime() ändern, um PEP 8 zu entsprechen. Ссылка

%Vor%     
steveha 09.06.2012, 06:17
quelle
-1
%Vor%     
number23_cn 09.06.2012 06:19
quelle

Tags und Links