2012-04-19 3 views
23

저는 파이썬을 처음 사용합니다. 다음 코드에 무엇이 잘못되었는지 말해 주시겠습니까? 내가 실행할 때 "NameError : 글로벌 이름 'reduce'가 정의되지 않았다는 오류 메시지가 나타납니다. 나는 Goolge에게 물었다. 그러나 그것은 쓸모가 없다. 내가 생각하는거야 :(NameError : 글로벌 이름 'reduce'가 정의되어 있지 않습니다.

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

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

하나는 자주 (이 경우, 당신은 단지'합을 할 수 sum' 바람직하다'또한, 위해 사용되고 있었기 때문에 (범위 (1, 11))'또는 파이썬 2에서'sum (xrange (1, 11))'). 또한 표준 라이브러리에있는 것과 같은'add' 함수가 있습니다 : operator.add'. – James

답변

46

그 :

  1. 당신은 당신은 파이썬 2

을 위해 설계된 자습서를 따르고 있습니다 파이썬 3 사용하고

  • 된다 reduce 함수는 일반적으로 사용되지 않으므로 Python 3의 내장 함수에서 제거되었습니다. functools 모듈에서 계속 사용할 수 있으므로 다음을 수행 할 수 있습니다.

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

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

    +0

    :) 감사합니다. 나는 그것을있어. – anhldbk

    +9

    "일반적으로 사용되지 않으므로"논쟁의 여지가 있습니다. – hcalves

    1

    16,또한

    # Import reduce from functools 
    from functools import reduce 
    

    는이 기능 내장 것처럼 당신이 reduce를 사용 할 수 있습니다. reduce`이 내장 기능의 밖으로 이동 된 이유 '의

    def main(): 
        def add(x,y): return x+y 
        reduce(add, range(1, 11)) 
    
    관련 문제