ホームページ > バックエンド開発 > Python チュートリアル > この記事では、Python の戻り関数について説明しています。

この記事では、Python の戻り関数について説明しています。

リリース: 2023-07-25 16:48:31
転載
876 人が閲覧しました

1. リターン関数とは何ですか?

Return 関数、簡単に言えば、戻り値は関数です。

関数を返します。結果は、返された関数が呼び出された場合にのみ返されます。


#2. クロージャ (戻り関数の形式で実装)

関連するパラメーターと変数は、「クロージャー」と呼ばれる返された関数に保存されます。

def returnre(a, b):
    def re():
        return a + b


    return re


test01 = returnre(1, 2)
test02 = returnre(1, 2)
print(test01 == test02)  # 每次调用都会返回新生成的函数
ログイン後にコピー

この記事では、Python の戻り関数について説明しています。

#たとえば、上記の例の re 関数クロージャの特性、入れ子になった関数は、非-globalscope 、定義時に含まれていた外側の名前空間を記憶できます。

例を見てみましょう:

def closur(a):
    def myprint():
        print(a)


    return myprint


test = closur(1)
test()
ログイン後にコピー

この記事では、Python の戻り関数について説明しています。

コード分析:

変数 a は関数クロージャのローカル変数です。関数の実行中にのみ存在する必要があります。ただし、クロージャの特性により、a の値はreturn 関数にカプセル化されます。

def closuretest02(*args):
    f = []
    for i in args:
        def test():
            return i**2
        f.append(test)
    return f
test = closuretest02(1,2,3,4)
for i in test:
    print(i())
ログイン後にコピー

この記事では、Python の戻り関数について説明しています。

返回闭包时牢记的一点就是:

返回函数不要引用任何循环变量,或者后续会发生变化的变量。

如果一定要引用循环变量怎么办?

方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变:

def count():
    def f(j):
        def g():
            return j*j
        return g
    fs = []
    for i in range(1, 4):
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs
ログイン後にコピー

再看看结果:

f1, f2, f3 = count()
print(f1())


print(f2())
print(f3())
ログイン後にコピー

この記事では、Python の戻り関数について説明しています。

注:

缺点是代码较长,可利用lambda函数缩短代码。

一个函数可以返回一个计算结果,也可以返回一个函数。返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。


三、拓展

nonlocal

nonlocal适用于嵌套函数中内部函数修改外部变量的值。

def outside():
    a = 1
    print('outside' + str(id(a)))
    def inside():
        nonlocal a
        print('inside ' + str(id(a)))
    inside()
outside()
ログイン後にコピー

因为使用nonlocal后,返回了闭包中有父函数的变量,所以父函数那里不会被回收。

この記事では、Python の戻り関数について説明しています。


四、总结

本文基于Python基础,介绍了返回函数。常见的返回函数的应用。函数作为返回值,闭包在实际应用中需要的点,遇到的难点,提供有效的解决方案。使用Python语言,能够更好的理解。

以上がこの記事では、Python の戻り関数について説明しています。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:Go语言进阶学习
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート