2012-04-19 41 views
23

私はPythonが初めてです。次のコードで何が間違っているのか教えてください。私が実行すると、 "NameError:グローバル名 'reduce'が定義されていません"というエラーメッセージが表示されます。私はGoolgeに尋ねたが、役に立たなかった。 :(NameError:グローバル名 'reduce'が定義されていません

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

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

、 (1,11)) 'または'(xrange(1,11)) 'をPython 2で使用しています)。また、標準ライブラリのあなたのものと同等の 'add'関数があります:' operator.add'。 – James

答えて

46

私が推測するつもりです:あなたは、Python 2.

ために設計されたチュートリアルを以下しているあなたは、Python 3を使用して、そして

    1. 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

    はまた

    # Import reduce from functools 
    from functools import reduce 
    

    それが機能して建設されたかのようにあなたがreduce使用できるようにします。 `sum`が好適である(この場合には、あなただけの`合計(範囲を行うことができ、それが頻繁に追加するために使用されていたので、 `reduce`は、組み込み関数の外に移動された理由の一つだった

    def main(): 
        def add(x,y): return x+y 
        reduce(add, range(1, 11)) 
    
    関連する問題