pythonノート--役割ドメイン、高次関数、閉パッケージ


アクティブドメイン
pythonで付与される変数の位置が異なり、変数にアクセスできる範囲が制限されている.すなわち、「変数の役割ドメインは、コード内の位置によって決定される」ということである.
1.LEGBルール
L(local):     ,         :         ,           ,          ,     。                    ,        。
E(enclosing):     ,         :         ,           。              ,     。
G(globle):     ,          ,           。
B(built-in):     ,          。

2.関数検索変数範囲の優先順位は、「ローカル役割ドメイン」>「ネスト役割ドメイン」>「グローバル役割ドメイン」>「ビルトイン役割ドメイン」です.
簡単な例:
#-*- coding:utf-8 -*-
a=10  #     
def test1():
    b=20    #     
    def test2():
        c=30    #     
        return(b-c)
    print(test2())
test1()

高次関数
関数がパラメータとして伝わる関数が高次関数です.簡単な例:
#-*- coding:utf-8 -*-
import sys
def my_print():
    print("this is a test!")
    
def my_confirm(f):
    confirm=input("    yes/no:")
    if confirm == 'yes':
        f()
    else:
        print("    !")
        sys.exit()

my_confirm(my_print)

クローズドパッケージ
ネストされた役割ドメインの変数は、内層関数によって呼び出され、閉包されます.簡単な例を示します.
#-*- coding:utf-8 -*-
def size1():
    a=10    #        
    def inner1():
        if a>5:
            print("more!")
        else:
            print("less!")
    return inner1    #   inner1       
size1()()

def size2(a=1):     #            
    def inner2():
        if a>5:
            print("more!")
        else:
            print("less!")
    return inner2
size2(20)()