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