いわゆる return 関数は、その名前が示すように、関数を次のように使用します。戻り値。関数をパラメーターとして受け取るだけでなく、高階関数は結果として関数を返すこともできます。変数パラメーターの連続乗算を実装しましょう。求積関数は次のように定義できます:
def calc_fac(*args): fx = 0 for n in args: fx = fx * n return fx
多くの場合、求積関数が定義されている場合、すぐに乗算する必要はありませんが、後続の関数に基づいて計算されます。計算、ライン通話。現時点では、関数の結果を返すことはできませんが、以下に示すように関数自体を返します。
def lazy_fac(*args): def fac(): fx = 0 for n in args: fx = fx * n return fx return fac
求積関数を再定義した後、lazy_fac() を呼び出すと、返されるのはfunction 積の結果は積ですが、積関数:
>>> a=lazy_fac(1,2,3,4) >>> a <function lazy_fac.<locals>.fac at 0x002a5dr42>
そして、関数 a が呼び出されると、積の処理が実行されます:
>>> a() 24
この例では、次のように定義します。関数lazy_fac 関数fac、facは内部関数と呼ぶことができ、lazy_facは外部関数です。内部関数 fac は、外部関数のパラメータやローカル変数を参照できます。パラメータと変数は、最終的に返す内部関数 fac に保存されます。このプログラム構造をPythonではクロージャと呼びます。
クロージャ構造では、関数が結果として戻ったときに、関数の処理はすぐには実行されず、a() を呼び出した後に実行されます。
つまり、関数プログラミングでは、関数は計算結果を返すだけでなく、実行されていない関数を返すこともできます。関数を返すときは、その関数がまだ実行されていないことを常に念頭に置き、返される関数に変更を引き起こす可能性のあるループ変数などの変数を導入しないようにしてください。
関数を渡す場合、またはコード構造が複雑すぎる場合は、明示的な関数定義の代わりに匿名関数を使用できます。現時点では、匿名関数によりコード構造が大幅に簡素化され、より洗練されたものになります。
前に紹介したマップ関数を例として x3 を計算し、無名関数の機能を見てみましょう。
>>> list(map(lambda x: x * x * x, [1, 2, 3])) [1, 8, 27]
比較からわかるように、無名関数 lambda x: x*x*x は次と同等です:
def f(x): return x * x * x
lambda は匿名関数のキーワードとして使用され、コロンの前の x は匿名関数のパラメーターを示します。無名関数は式を 1 つだけ持つことができ、関数の定義のように return を記述する必要はありません。無名関数には関数名がないため、使用時に関数名の競合を心配する必要がありません。関数オブジェクトとして、匿名関数は変数に値を割り当てる規則にも準拠します:
>>> fx = lambda x: x * x * x >>> fx <function <lambda> at 0x101c6ef28> >>> f(4) 64
同様に、関数としての匿名関数は戻り関数としても使用できます:
以上がPython 関数プログラミング: 戻り関数と匿名関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。