ホームページ  >  記事  >  バックエンド開発  >  Python の戻り関数と戻り値の秘密

Python の戻り関数と戻り値の秘密

Tomorin
Tomorinオリジナル
2018-08-17 17:53:351690ブラウズ

私は最近 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。