web-dev-qa-db-fra.com

NameError: le nom 'reduction' n'est pas défini dans Python

J'utilise Python 3.2. J'ai essayé ceci:

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

Et j'ai eu l'erreur suivante:

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

Essayé d'imprimer reduce dans la console interactive - a obtenu cette erreur:

NameError: name 'reduce' is not defined


Est-ce que reduce est vraiment supprimé dans Python 3.2? Si tel est le cas, quelle est l'alternative?

166
Sergey

Il a été déplacé à functools .

251

Vous pouvez ajouter

from functools import reduce

avant d'utiliser le réduire.

159
3heveryday

Ou si vous utilisez les six bibliothèques

from six.moves import reduce
4
Azd325

Dans ce cas, je pense que ce qui suit est équivalent:

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

Le seul problème avec cela est que cela crée de gros nombres, mais peut-être que c'est mieux que des opérations modulo répétées?

2
David M