Pythonでの閉パッケージの使用原理と注意事項を遊ぶ


def fuc(args):
    print("    :",args)
    return args +1
#      1
fuc(10)
print("*"*20)
f = fuc(10)  #                
print(id(f),id(fuc(10)))
f  #        fuc(10)
print(f,fuc(10)) #11,11

#      2
f1 = fuc #    ()   ,            
print(id(f1),id(fuc),f1,fuc)
#9350288 9350288  
fuc(11)  #    : 11
f1(11)  #    : 11

1.クローズとは
以下に,閉パケットとは,1つの関数のうちfuncにもう1つの内部関数resultを定義することである.この内部関数resultは、外部関数funcのパラメータおよび局所変数を参照(実際には参照しなくてもよい)することができる.また、内部関数の関数体を外部関数の戻り値(関連パラメータと変数は戻り関数に保存されます)として関数に返します.このような内部関数の形式は「クローズドパッケージ(Closure)」と呼ばれ、結局クローズドパッケージは高度な関数の使用である.
def func(a):
    print("this is :",a)
    def result(x,y):
        sum = a*x +y
        print("sum is :",sum)
        return sum

    return result  #           ,  result(). result        func,     
-------------------------    ---------------------------------------
1.      
func(10)  #      func      print.
print("------------")
f1 = func(10)
f1(10,20)  #        func(10)(10,20),     result    。          
print(f1(10,20)) #        。
'''
this is : 10
------------
this is : 10
sum is : 120
sum is : 120
120
'''

内部関数(閉パッケージ)は必ずしも外部関数の変数を参照する必要はありませんが、彼はこの権限を持っています.外部関数は、権限チェックなどに使用される場合があります.
def func1():
    print("       ,      ,      ")
    pass
    num = 1000
    def result1(x,y): #              
        sum = x +y
        print("sum is :",sum)
        return sum

    return result1  #           ,  result().      func    ,     

f1 = func1()
f1(10,20)

'''
       ,      ,      
sum is : 30
'''

内部関数外部関数の変数の変更
def counter(start=0):
    def incr():
        nonlocal start 
        # nonlocal python3               (         ,         ,  global)
        start += 1
        return start
    return incr

c1 = counter(5)
print(c1())
print(c1())

c2 = counter(50)
print(c2())
print(c2())

print(c1())
print(c1())

print(c2())
print(c2())
'''
6
7
51
52
8
9
53
54

'''

2.閉鎖の用途とメリット
    1.クローズドパッケージの機能:
1.        ,            ,        ,           
2.           ,           。
3.                ,                ,    

   2.クローズド・パッケージの用途:
閉包が本当に役に立つのは装飾器での使用であり、装飾器の強力な機能は閉包に基づいて実現されている.
統一声明:オリジナルブログの内容については、一部の内容がインターネットから参照されている可能性があります.オリジナルリンクがあれば参照を宣言します.オリジナルリンクが見つからない場合は、権利侵害がある場合は削除に連絡してください.ブログの転載については、オリジナルリンクがあれば声明します.オリジナルリンクが見つからない場合は、権利侵害がある場合は削除に連絡してください.