2012-04-19 9 views
23

Soy nuevo en Python. ¿Podrías decirme qué pasa con el siguiente código? Cuando lo ejecuto, recibí un mensaje de error de "NameError: nombre global 'reducir' no está definido". Le pregunté a Goolge pero es inútil. :(NameError: el nombre global 'reduce' no está definido

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

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

Una de las razones 'reduce' se mueve fuera de los muebles empotrados para la adición, donde' Es preferible sum' (en este caso, sólo se podía hacer 'suma (rango (1, 11)) ', o' suma (xrange (1, 11)) 'en Python 2). Tenga en cuenta también que hay una función 'add' equivalente a la suya en la biblioteca estándar:' operator.add'. – James

Respuesta

46

Voy a adivinar que:

  1. Está utilizando Python 3, y
  2. Estas siguiendo un tutorial diseñado para Python 2.

El La función reduce, dado que no se usa comúnmente, se eliminó de las funciones incorporadas en Python 3. Todavía está disponible en el módulo functools, por lo que puede hacer:

import functools 

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

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

+0

:) ¡Muchas gracias! Lo tengo. – anhldbk

+9

"ya que no se usa comúnmente" es discutible. – hcalves

1

también

# Import reduce from functools 
from functools import reduce 

Le permite utilizar reduce como si se tratara de una función integrada. fue debido a que con frecuencia se utilizaba

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