2012-04-19 8 views
23

Sono nuovo di Python. Potresti dirmi cosa c'è di sbagliato nel seguente codice? Quando lo eseguo, ho ricevuto un messaggio di errore "NameError: nome globale" reduce "non definito". Ho chiesto a Goolge ma è inutile. :(NameError: nome globale 'reduce' non definito

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

if __name__=='__main__': 
    main() 
+3

Una delle ragioni per 'reduce' è stata spostata all'esterno del built-in era perché era spesso viene utilizzata in aggiunta, dove' sum' è preferibile (in questo caso, si può solo fare 'sum (range (1, 11)) ', o' sum (xrange (1, 11)) 'in Python 2). Nota anche che esiste una funzione 'add' equivalente alla tua nella libreria standard:' operator.add'. – James

risposta

46

ho intenzione di indovinare che:

  1. Si sta utilizzando Python 3, e
  2. State seguendo un tutorial progettato per Python 2.

Il La funzione reduce, poiché non è comunemente utilizzata, è stata rimossa dalle funzioni integrate in Python 3. È ancora disponibile nel modulo functools, quindi è possibile effettuare le seguenti operazioni:

import functools 

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

vedi http://docs.python.org/release/3.0.1/whatsnew/3.0.html –

+0

:) Grazie mille! Ho capito. – anhldbk

+9

"poiché non è comunemente usato" è discutibile. – hcalves

1

anche

# Import reduce from functools 
from functools import reduce 

Consente di utilizzare reduce come se fosse costruito in funzione di.

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