N Pythonのクラス36 - 閉鎖機能

この記事では、著者がすべてオリジナルです、転載の場合は、ソースを明記してください。https://www.cnblogs.com/xuexianqi/p/12533858.html

一:大前提

スコープの名前空間= + +ネストされた関数オブジェクト機能付きクロージャ関数

コア・ポイント:関係の名前は、関数定義の段階が優先見つけることです

2:閉鎖機能とは何ですか

「クローズ」機能が内蔵されている機能の機能を指し、

「パッケージ」機能は、外側層の機能を意味する(しないグローバルスコープで)関数スコープの名前への参照を含みます

閉鎖機能:ネストされた関数の名前空間のアプリケーションとスコープ+

def f1():
    x = 33333333333333333333
    def f2():
        print(x)
    f2()

x=11111
def bar():
    x=444444
    f1()

def foo():
    x=2222
    bar()

foo()

输出:33333333333333333333
思路:调用的是函数foo(),函数foo()内的x=2222未被调用,调用了函数bar()
     函数bar()内的x=444444未被调用,调用了函数f1()
     函数f1()内定义了x,定义了函数f2(),函数f2()内输出x
     函数f2()内未定义x,就去f1()中,找到了x=33333333333333333333
     最后函数f1()调用了函数f2(),输出33333333333333333333
def f1():
    x = 33333333333333333333
    def f2():
        print('函数f2:',x)
    return f2

f=f1()          # 调用f1(),返回函数f2(),输出:函数f2:33333333333333333333

def foo():
    x=5555
    f()

foo()           # 调用foo(),foo()内调用了f(),也就是调用了f2,输出:函数f2:33333333333333333333

输出:函数f2: 33333333333333333333

3:閉鎖機能を持っているのはなぜ==「クロージャ機能

:によって身体の関数として伝送パラメータの二種類

方法:パラメータは、関数本体に直接成形に必要なパラメータを定義します

def f2(x):
    print(x)

f2(1)
f2(2)
f2(3)

输出:
1
2
3

第二の方法:閉鎖機能を使用

def f1(x): # x=3
    # x=3
    def f2():
        print(x)
    return f2

x=f1(3)
print(x)
x()

输出:
<function f1.<locals>.f2 at 0x02F734A8>
3

おすすめ

転載: www.cnblogs.com/xuexianqi/p/12533858.html