Wenn ich auf die Situation stoße, in der ich es in Javascript tun kann, denke ich immer, wenn es eine foreach
Funktion gibt, wäre es bequem. Mit foreach meine ich die Funktion, die unten beschrieben wird:
def foreach(fn,iterable):
for x in iterable:
fn(x)
Sie machen es einfach für jedes Element und haben nichts zurückgegeben oder zurückgegeben. Ich denke, es sollte eine eingebaute Funktion sein und schneller als das Schreiben mit reinem Python, aber ich habe es nicht auf der Liste gefunden, oder es hat nur einen anderen Namen genannt oder ich vermisse hier nur einige Punkte?
Vielleicht habe ich mich geirrt, weil das Aufrufen einer Funktion in Python hohe Kosten verursacht hat, definitiv keine gute Praxis für das Beispiel. Anstelle einer Out-Schleife sollte die Funktion die Schleife in der Seite ausführen, in der ihr Körper wie folgt aussieht, was bereits in vielen Python-Code-Vorschlägen erwähnt wurde:
def fn(*args):
for x in args:
dosomething
aber ich dachte, foreach ist immer noch eine willkommene Grundlage für die beiden Fakten:
- Im Normalfall kümmern sich die Leute einfach nicht um die Leistung
- Manchmal hat die API kein iterierbares Objekt akzeptiert und Sie können die Quelle nicht neu schreiben.
quelle
for
Schleife zu verwenden?for
ist.list.each(func)
ist sauberer alsfor item in list: func(item)
IMO. Das Problem ist, dass Python gute Arbeit geleistet hat, um funktionale Favoriten wiemap()
undfilter()
durch Listenverständnisse zu ersetzen, die einfach das eingebautefor
undif
(homogen und lesbar) erweitern, und ein bestimmtes.each()
könnte dagegen sprechen .sum(0 for _ in map(f, seq))
ist eine lesbare Problemumgehung.Antworten:
Jedes Vorkommen von "foreach", das ich gesehen habe (PHP, C #, ...), macht im Grunde dasselbe wie die "for" -Anweisung von Python.
Diese sind mehr oder weniger gleichwertig:
Also, ja, es gibt ein "foreach" in Python. Es heißt "für".
Was Sie beschreiben, ist eine "Array Map" -Funktion. Dies könnte mit Listenverständnissen in Python geschehen :
quelle
Python hat per se keine
foreach
Aussage . In die Sprache sind Schleifen eingebaut.for
Wenn Sie wirklich wollten, können Sie Ihre eigene
foreach
Funktion definieren :Nebenbei bemerkt
for element in iterable
stammt die Syntax aus der Programmiersprache ABC , einem der Einflüsse von Python.quelle
map
, funktioniert die Verwendung auf diese Weise in Python 3, womap
es faul ist, nicht wirklich . Das heißt, es wird jetzt ein Iterator zurückgegeben, keine bereits berechnete Liste. Die Nebenwirkungen treten erst auf, wenn Sie die resultierende Liste durchlaufen.for
Schleife, und wenn die Iterable lang (möglicherweise unendlich) ist oder die Funktionsrückgabewerte groß sind, wird sie mit a unterbrochenMemoryError
.for
Schleife funktioniert, sowie das Verständnis der Liste.Andere Beispiele:
Python Foreach-Schleife:
Python For Loop:
quelle
map
kann für die in der Frage genannte Situation verwendet werden.Z.B
Für Funktionen, die mehrere Argumente annehmen, können der Zuordnung weitere Argumente zugewiesen werden:
Es gibt eine Liste in Python 2.x und einen Iterator in Python 3 zurück
Falls Ihre Funktion mehrere Argumente akzeptiert und die Argumente bereits in Form von Tupeln (oder iterierbaren seit Python 2.6) vorliegen, können Sie diese verwenden
itertools.starmap
. (die eine sehr ähnliche Syntax hat wie das, wonach Sie gesucht haben). Es wird ein Iterator zurückgegeben.Z.B
gibt uns 8 und 9
quelle
map
undforeach
haben unterschiedliche Bedeutung.map
Gibt eine Ergebnisliste zurück (was bedeutet, dass eine Liste oder eine Aufzählungsstruktur oder eine Struktur erstellt wird, die verbraucht wird und daher nicht sofort aufgerufen wird),foreach
ruft die Funktion für jedes Element auf und ignoriert das Ergebnis.Foreach
muss das Ergebnis sofort zurückgeben. Zu sagen, dass das Erstellen eines Iterators anstelle von foreach bevorzugt wird, ist totaler Mist.map()
wenn das Ergebnis ignoriert wird , ist ein Anti-Muster. Sie sollten stattdessen eine for-Schleife verwenden.map
und Ignorieren der Ergebnisse führt in Python 3 zu unerwünschten Ergebnissen, da diesemap
nur dann träge ausgewertet werden, wenn die resultierende Liste verwendet wird. Wenn das Ergebnis vonmap
nie verbraucht wird, werden die Anrufe nie angewendet.Dies macht den foreach in Python 3
quelle
Ja, obwohl es dieselbe Syntax wie eine for-Schleife verwendet.
quelle
forEach
Wenn ich Sie richtig verstanden habe, meinen Sie, wenn Sie eine Funktion 'func' haben, möchten Sie für jedes Element in der Liste überprüfen, ob func (Element) true zurückgibt. Wenn Sie für alle wahr werden, dann tun Sie etwas.
Sie können "alle" verwenden.
Zum Beispiel: Ich möchte alle Primzahlen im Bereich von 0 bis 10 in einer Liste erhalten:
quelle
Hier ist das Beispiel der "foreach" -Konstruktion bei gleichzeitigem Zugriff auf die Elementindizes in Python:
quelle
Schauen Sie sich diesen Artikel an . Das Iteratorobjekt nditer von numpy in NumPy 1.6 eingeführte Paket bietet viele flexible Möglichkeiten, um alle Elemente eines oder mehrerer Arrays systematisch aufzurufen.
Beispiel:
quelle
Wenn Sie nur nach einer präziseren Syntax suchen, können Sie die for- Schleife in eine Zeile setzen:
Trennen Sie einfach zusätzliche Anweisungen mit einem Semikolon.
Dies entspricht möglicherweise nicht Ihrem lokalen Styleguide, aber es kann sinnvoll sein, dies so zu tun, wenn Sie in der Konsole herumspielen.
quelle
Ich denke, dies beantwortet Ihre Frage, weil es wie eine "für jede" Schleife ist.
Das folgende Skript ist in Python (Version 3.8) gültig:
quelle