私は最近 Python に触れるようになり、 Python で関数 を返すという概念を知りました。これまでは 関数の戻り値 しか知りませんでした。たとえば、Python では次のことができます。 return int、str、list、dict など。データ型。ここで言いたいのは、Python は return 関数 もサポートしているということです。
最初に、Python の return 関数サポートの基本構文を見てみましょう
def f(): print 'call f()...' # 定义函数g: def g(): print 'call g()...' # 返回函数g: return g
変数パラメータの合計を実装しましょう。通常、合計関数は次のように定義されます:
def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax
しかし、合計をすぐに合計する必要がなく、後続のコードで必要に応じて計算される場合はどうなるでしょうか?合計結果を返す代わりに、合計関数を返すことができます:
def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum
lazy_sum() を呼び出すと、返されるのは合計結果ではなく、合計関数です:
>>> f = lazy_sum(1, 3, 5, 7, 9) >>> f <function lazy_sum.<locals>.sum at 0x101c6ed90>
合計の結果は、関数 f が呼び出されたときに実際に計算されます。
>>> f() 25
この例では、関数 sum を関数 Lazy_sum で定義し、内部関数 sum は外部関数 Layy_sum のパラメータを参照でき、ローカル変数. Lazy_sum が関数の合計を返すとき、関連するパラメータと変数は返された関数に保存されます. この「クロージャ」と呼ばれるプログラム構造は大きな力を持っています。
もう 1 つ注意してください。lazy_sum() を呼び出すと、たとえ同じパラメータが渡されたとしても、各呼び出しは新しい関数を返します:
>>> f1 = lazy_sum(1, 3, 5, 7, 9) >>> f2 = lazy_sum(1, 3, 5, 7, 9) >>> f1==f2 False
f1() と f2()呼び出し結果は相互に影響しません。
以上がPython の戻り関数と戻り値の秘密の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。