2012-04-19 8 views
23

Jestem nowy w Pythonie. Czy mógłbyś mi powiedzieć, co jest nie tak z następującym kodem? Po uruchomieniu otrzymałem komunikat o błędzie "NameError: nazwa globalna" reduce "nie jest zdefiniowana". Zapytałem Goolge, ale jest to bezużyteczne. :(NameError: nazwa globalna 'reduce' nie jest zdefiniowana

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

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

Jednym z powodów 'reduce' został przeniesiony z wbudowanego ins, ponieważ był często używany jako dodatek, gdzie' sum' jest korzystne (w tym przypadku można po prostu zrobić 'sumę (zakres (1, 11)) 'lub' sum (xrange (1, 11)) 'w Pythonie 2). Zauważ również, że istnieje funkcja 'add' równoważna twojemu w bibliotece standardowej:' operator.add'. – James

Odpowiedz

46

Idę się domyślić, że:

  1. Używasz Python 3 i
  2. Obserwujesz poradnik przeznaczony dla Pythona 2.

The Funkcja reduce, ponieważ nie jest powszechnie używana, została usunięta z wbudowanych funkcji w Pythonie 3. Jest nadal dostępna w module functools, dzięki czemu można wykonać:

import functools 

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

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

+0

:) Dziękuję bardzo! Mam to. – anhldbk

+9

"ponieważ nie jest powszechnie używane" jest dyskusyjne. – hcalves

1

także

# Import reduce from functools 
from functools import reduce 

Umożliwia korzystanie reduce jakby były zbudowane w funkcji.

def main(): 
    def add(x,y): return x+y 
    reduce(add, range(1, 11)) 
Powiązane problemy