NameError: Der Name 'reduzieren' ist in Python nicht definiert

187

Ich benutze Python 3.2. Versuchte dies:

xor = lambda x,y: (x+y)%2
l = reduce(xor, [1,2,3,4])

Und bekam folgenden Fehler:

l = reduce(xor, [1,2,3,4])
NameError: name 'reduce' is not defined

Versucht, reducein eine interaktive Konsole zu drucken - habe diesen Fehler erhalten:

NameError: name 'reduce' is not defined


Wird reducein Python 3.2 wirklich entfernt? Wenn dies der Fall ist, welche Alternative gibt es dann?

Sergey
quelle
3
@JBernardo, was ist das richtige Werkzeug?
Sergey

Antworten:

280

Es wurde nach verschoben functools.

Ignacio Vazquez-Abrams
quelle
49
@ julio.alegria: Weil Guido es hasst .
Ignacio Vazquez-Abrams
6
Der Artikel, auf den in @ IgnacioVazquez-Abrams verwiesen wird, enthält einige wirklich gute Punkte darüber, wie die meisten Fälle besser lesbar geschrieben werden können. Für mich ist es schriftlich sum(item['key'] for item in list_of_dicts).
Connorbode
194

Du kannst hinzufügen

from functools import reduce

bevor Sie die Reduktion verwenden.

Jeden Tag
quelle
3
Der vorherige Benutzer hat die Frage bereits beantwortet und die Antwort ist die gleiche wie die seiner Antwort
Kathiravan Natarajan
8

Oder wenn Sie die sechs Bibliotheken verwenden

from six.moves import reduce
Azd325
quelle
3

In diesem Fall glaube ich, dass Folgendes gleichwertig ist:

l = sum([1,2,3,4]) % 2

Das einzige Problem dabei ist, dass es große Zahlen erzeugt, aber vielleicht ist das besser als wiederholte Modulo-Operationen?

David M.
quelle
Wiederholte Modulo-Operationen sind nützlich, wenn es hilft, Zahlen klein zu halten. Das Summieren von Zahlen erzeugt keine großen Zahlen, es sei denn, Sie summieren VIELE Zahlen. In diesem Fall würde dies also nicht helfen. Zumal dies nicht die Verwendung der eingebauten Summenfunktion ermöglicht, die viel schneller ausgeführt wird als die wiederholte Anwendung einer benutzerdefinierten Funktion
HackerBoss