web-dev-qa-db-fra.com

NameError: le nom global 'réduire' n'est pas défini

Je suis nouveau sur Python. Pourriez-vous me dire ce qui ne va pas avec le code suivant? Lorsque je l'exécute, je reçois un message d'erreur de "NameError: le nom global 'réduire' n'est pas défini". J'ai demandé à Goolge mais c'est inutile. :(

def main():
    def add(x,y): return x+y
    reduce(add, range(1, 11))

if __name__=='__main__':
    main()
29
anhldbk

Je vais deviner que:

  1. Vous utilisez Python 3, et
  2. Vous suivez un tutoriel conçu pour Python 2.

La fonction reduce, car elle n'est pas couramment utilisée, a été supprimée des fonctions intégrées dans Python 3. Elle est toujours disponible dans le module functools , vous pouvez donc faire:

import functools

def main():
    def add(x,y): return x+y
    functools.reduce(add, range(1, 11))
55
Greg Hewgill

Aussi

# Import reduce from functools
from functools import reduce

Vous permet d'utiliser reduce comme s'il s'agissait d'une fonction intégrée.

def main():
    def add(x,y): return x+y
    reduce(add, range(1, 11))
6
chim