HOWTO · Python
Solve Reduce が Python で定義されていない
このチュートリアルでは、Python で reduce is not defined エラー メッセージを解決する方法について説明します。
ときどき、Not Defined エラー メッセージ、さらには NameError に直面することがよくあります。 これらのエラー メッセージは典型的なものであり、Python コード内で名前が付けられていることを簡単に理解していれば、簡単に解決できます。
NameError および Not Defined エラーは、存在しない変数、バインディング、関数、またはライブラリに起因します。 このコンテキストでは、reduce 関数はコード内に存在しません。
この記事では、Python コード内の reduce is not defined エラーを解決する方法について説明します。
functools を使用して Python で NameError: name 'reduce' is not defined を解決する
reduce() 関数 は、リスト内の各要素に対して ラムダ関数 を使用して、リストから単一の値を計算するのに役立ちます。 reduce() 関数は、配列から現在の要素を取得し、リスト内のすべての要素を通過するまで現在の値と結合または比較することによって値を構築します。
Python 3 より前では、reduce() 関数は組み込み関数として機能していました。 したがって、リスト内のすべての要素を合計する以下のコード スニペットは機能します。
def anon(x, y):
return x + y
sum = reduce(anon, [1, 2, 3, 4])
print(sum)
ただし、上記のコードを実行すると、次のエラーが発生します。
Traceback (most recent call last):
File "c:\Users\akinl\Documents\HTML\python\txt.py", line 2, in <module>
l = reduce(anon, [1,2,3,4])
NameError: name 'reduce' is not defined
これは、reduce() が組み込み関数ではなく、functools と呼ばれる組み込みライブラリ内の関数であり、高階関数と呼び出し可能なオブジェクトに対する操作が含まれているためです。 reduce() は高階関数であるため、存在することは理にかなっています。
reduce() は別の関数を引数に取るので高階関数です。 reduce() を利用するには、functools をインポートする必要があります:
import functools
def anon(x, y):
return x + y
sum = functools.reduce(anon, [1, 2, 3, 4])
print(sum)
コードの出力:
10
コード内で from キーワードを使用して reduce をインポートするのを簡単にすることができます。
from functools import reduce
def anon(x, y):
return x + y
sum = reduce(anon, [1, 2, 3, 4])
print(sum)
コードの出力:
10
コード内に reduce is not defined エラーがなくなり、そのようなエラーが発生した場合に何を探すべきかを理解できるようになりました。