2012-04-19 4 views
23

Tôi mới dùng Python. Bạn vui lòng cho tôi biết có gì sai với mã sau không? Khi tôi chạy nó, tôi nhận được một thông báo lỗi của "NameError: tên toàn cầu 'giảm" không được xác định ". Tôi hỏi Goolge nhưng nó vô dụng. :(TênError: tên chung 'giảm' không được xác định

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

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

Một trong những lý do 'reduce' được chuyển ra ngoài vì nó thường được sử dụng để bổ sung, trong đó' sum' là thích hợp hơn (trong trường hợp này, bạn chỉ có thể làm 'sum (phạm vi) (1, 11)) ', hoặc' sum (xrange (1, 11)) 'trong Python 2). Cũng lưu ý rằng có một hàm 'add' tương đương với hàm của bạn trong thư viện chuẩn:' operator.add'. – James

Trả lời

46

tôi sẽ đoán rằng:

  1. Bạn đang sử dụng Python 3 và
  2. Bạn đang theo dõi một hướng dẫn thiết kế cho Python 2.

Các Hàm reduce, vì nó không được sử dụng phổ biến, đã bị xóa khỏi các hàm dựng sẵn trong Python 3. Nó vẫn có sẵn trong mô-đun functools, vì vậy bạn có thể làm:

import functools 

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

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

+0

:) Cảm ơn rất nhiều! Tôi đã hiểu. – anhldbk

+9

"vì nó không thường được sử dụng" là tranh chấp. – hcalves

1

Cũng

# Import reduce from functools 
from functools import reduce 

Cho phép bạn sử dụng reduce như thể đó là một xây dựng trong chức năng.

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