Ich versuche, map
in Python3 zu verwenden. Hier ist ein Code, den ich verwende:
Da map
in Python3 jedoch einen Iterator zurückgibt, funktioniert dieser Code nicht in Python3 (funktioniert aber gut in Python2, da diese Version von map
immer eine list
zurückgibt)
Meine aktuelle Lösung besteht darin, einen list
Funktionsaufruf über den Iterator hinzuzufügen, um die Auswertung zu erzwingen. Aber es scheint seltsam (ich interessiere mich nicht für den Rückgabewert, warum sollte ich den Iterator in eine Liste konvertieren?)
Irgendwelche besseren Lösungen?
Die Verwendung von map
für seine Nebenwirkungen (zB Funktionsaufruf), wenn Sie an zurückgegebenen Werten nicht interessiert sind, ist sogar in Python2.x unerwünscht. Wenn die Funktion None
zurückgibt, aber millionenfach wiederholt wird, würden Sie eine Liste von einer Million None
s erstellen, nur um sie zu verwerfen. Der richtige Weg besteht darin, entweder eine For-Schleife zu verwenden und zu rufen:
oder wie das Modul csv
erlaubt, verwenden Sie:
Wenn Sie aus irgendeinem Grund wirklich map
verwenden möchten, können Sie das consume
Rezept von itertools verwenden und eine Null-Länge erzeugen, zB:
Wenn Sie den Rückgabewert nicht interessieren, ist map
nicht das beste Werkzeug für den Job. Ein einfacher for
wäre besser:
Das wird in Python 2.x und 3.x funktionieren. Beachten Sie, dass map
nützlich ist, wenn Sie eine neue Liste erstellen möchten, wenn Sie nur für den Effekt über eine iterable gehen, und verwenden Sie dann for
.
Sie können dazu eine Null-Länge-Deque einrichten:
%Vor%Dies ist die gleiche Art, wie das Rezept itertools.consume (Iterator, None) funktioniert. Es wird funktional den Iterator erschöpfen, ohne die Liste zu erstellen.
Sie können auch einfach das Rezept verwenden von itertools verwenden.
Aber eine Schleife ist für mich lesbarer und Pythonic, aber YMMV.
Tags und Links python