Jeden Tag liebe ich Python mehr und mehr.
Heute habe ich einen Code geschrieben wie:
for i in xrange(N):
do_something()
Ich musste N-mal etwas tun. Aber jedes Mal hing es nicht vom Wert von i
(Indexvariable) ab. Mir wurde klar, dass ich eine Variable erstellte, die ich nie verwendet habe (i
), und dachte: "Es gibt sicherlich einen pythonischeren Weg, dies zu tun, ohne dass diese nutzlose Indexvariable benötigt wird."
Also ... die Frage ist: Weißt du, wie man diese einfache Aufgabe (pythonischer) schöner macht?
coding-style
for-loop
python
Manuel Aráoz
quelle
quelle
range
stattdessen.Antworten:
Ein etwas schnellerer Ansatz als das Schleifen
xrange(N)
ist:quelle
Verwenden Sie die Variable _, wie ich bei der Beantwortung dieser Frage erfahren habe , zum Beispiel:
quelle
Ich benutze nur
for _ in range(n)
, es ist direkt auf den Punkt. Es wird die gesamte Liste für große Zahlen in Python 2 generieren, aber wenn Sie Python 3 verwenden, ist dies kein Problem.quelle
Da die Funktion ein erstklassiger Bürger ist, können Sie einen kleinen Wrapper schreiben (aus Alex Antworten).
dann können Sie die Funktion als Argument übergeben.
quelle
Das _ ist dasselbe wie x. Es ist jedoch eine Python-Sprache, die verwendet wird, um einen Bezeichner anzugeben, den Sie nicht verwenden möchten. In Python benötigen diese Bezeichner kein Memor oder weisen keinen Speicherplatz zu, wie dies bei Variablen in anderen Sprachen der Fall ist. Das kann man leicht vergessen. Es sind nur Namen, die auf Objekte verweisen, in diesem Fall eine Ganzzahl bei jeder Iteration.
quelle
Ich fand die verschiedenen Antworten sehr elegant (insbesondere die von Alex Martelli), wollte aber die Leistung aus erster Hand quantifizieren und habe mir das folgende Skript ausgedacht:
Ich habe mir auch eine alternative Lösung ausgedacht, die auf der von Martelli aufbaut und
map()
zum Aufrufen der Nutzlastfunktion verwendet wird. OK, ich habe ein bisschen geschummelt, weil ich mir die Freiheit genommen habe, die Nutzlast dazu zu bringen, einen Parameter zu akzeptieren, der verworfen wird: Ich weiß nicht, ob es einen Weg gibt, dies zu umgehen. Trotzdem hier die Ergebnisse:Die Verwendung der Karte ergibt also eine Verbesserung von ungefähr 30% gegenüber dem Standard für Schleifen und zusätzlichen 19% gegenüber Martellis.
quelle
Angenommen, Sie haben do_something als Funktion definiert und möchten diese N- mal ausführen . Vielleicht können Sie Folgendes versuchen:
quelle
fn() for fn in itertools.repeat(do_something, N)
das Array vorab zu generieren und zu speichern. Dies ist meine bevorzugte Redewendung.Was ist mit einer einfachen while-Schleife?
Sie haben bereits die Variable; warum nicht benutzen?
quelle