228 votes

NameError : le nom 'reduce' 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 obtenu l'erreur suivante :

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

J'ai essayé d'imprimer reduce dans la console interactive - j'ai obtenu cette erreur :

NameError: name 'reduce' is not defined

Est reduce vraiment supprimé dans Python 3.2 ? Si c'est le cas, quelle est l'alternative ?

3 votes

@JBernardo, quel est le bon outil ?

331voto

Ignacio Vazquez-Abrams Points 312628

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

55 votes

@julio.alegria : Parce que Guido le déteste .

7 votes

L'article référencé par @IgnacioVazquez-Abrams présente de très bons points sur la façon dont la plupart des cas peuvent être rédigés de manière plus lisible. Pour moi, c'est en écrivant sum(item['key'] for item in list_of_dicts) .

5 votes

Cela devrait être dans la langue de base

256voto

3heveryday Points 2247

Vous pouvez ajouter

from functools import reduce

avant d'utiliser la réduction.

5 votes

L'utilisateur précédent a déjà répondu à la question et la réponse est la même que celle qu'il a donnée.

10voto

Azd325 Points 704

Ou si vous utilisez la bibliothèque six

from six.moves import reduce

2voto

David M Points 39

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

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

Le seul problème avec cette méthode est qu'elle crée de grands nombres, mais peut-être est-ce mieux que des opérations modulo répétées ?

0 votes

Les opérations modulo répétées sont utiles lorsqu'il s'agit de garder des nombres petits. L'addition de nombres ne créera pas de grands nombres à moins que vous n'additionniez BEAUCOUP de nombres, donc dans ce cas, cela ne serait pas utile. D'autant plus que le fait de ne pas le faire permet d'utiliser la fonction somme intégrée, qui s'exécutera beaucoup plus rapidement que l'application répétée d'une fonction définie par l'utilisateur.

0 votes

@HackerBoss 231312444444444444444444444444444444444444444 + 1 regardez une seule somme et j'ai fait un grand nombre, votre argument est assez mauvais.

1voto

Jesvin Vijesh S Points 439

Vous devez installer et importer reduce de functools paquet python

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X