【Class 17】python進級-関数式プログラミング-閉パッケージ

4992 ワード

かんすうしきプログラミング
閉パケット=関数+環境変数閉パケットの環境変数には、nonlocalで宣言されたローカル変数を使用して、グローバル変数と同様に、閉パケットで前回呼び出した状態を保存するフィールドを保存する機能があります.
例1:
def curve_pre():
    a = 25
    def curve(x):
        return a * x * x
    return curve

f = curve_pre()
print( f(2) )100

例2:
a = 25
def curve_pre():
    def curve(x):
        return a * x * x
    return curve

#     a          10
a = 10
f = curve_pre()
print( f(2) )40

例3:
def curve_pre():
    a = 25
    def curve(x):
        return a * x * x
    return curve

#     a          10
f = curve_pre()
print(f.__closure__)
print(f.__closure__[0].cell_contents)

print( f(2) )(<cell at 0x0000025519CD0768: int object at 0x00007FF9BB39E650>,)
25
100

global文:関数外に定義された変数に値を割り当てる場合は、Pythonという変数名はローカルではなくグローバルであることを伝えなければなりません.global文を使用してこの機能を完了します.global文がなければ、関数外に定義された変数に値を割り当てることはできません.
例:
def curve_pre():
    global a
    a = 20
    def curve(x):
        return a * x * x
    return curve
a = 10;

nonlocal文は、ローカル変数ではない変数を強制的に宣言します.