関数役割ドメイン、nonlocal、global

3057 ワード

関数には可視範囲があります.これが役割ドメインの概念です.内部関数は外部で直接使用できず、Name異常が放出されます.見えないからです.
アクティブドメイン
  • 識別子の可視範囲.これが識別子の役割ドメインである.一般に変数の役割ドメイン
  • である.
  • ネスト解除例から
  • がわかる.
  • 外層変数作用域は内層作用域で
  • が見られる.
  • 内層役割ドメインでは、変数名oが定義されている場合、現在の役割ドメインで新しい変数名oが再定義されていることに相当する.しかし、このoは外層作用領域における変数名oを上書きしていない.

  • グローバル役割ドメイン
  • プログラム実行環境全体で
  • が表示される.
    ローカルスコープ
  • は、関数、クラスなどの内部に
  • が見られる.
  • ローカル変数は、その存在を超えてはならないローカル役割ドメイン
  • を返す.
    x = 5
    def foo():
        x+=1
    foo()
  • x+=1実はx=x+1
  • はfoo内部で局所変数xを定義することに相当し、foo内部のすべてのxはこの局所変数x
  • である.
  • しかしこのxはまだ付与が完了していないので、右側に1を加えてグローバル変数global
  • を操作しました.
    x = 5
    def foo():
        global x   
        x += 1
        print(X)
    foo()
  • globalキーワードの変数を使用してfoo内のxを外部のグローバル役割ドメインで定義されたx
  • と宣言する.
  • グローバル役割ドメインにはxの定義
  • が必要である.
    閉パッケージ自由変数:ローカルの役割ドメインで定義されていない変数、例えばメモリ関数外の外層関数の役割ドメインで定義された変数閉パッケージ:ネスト関数に現れる概念であり、内層関数が外層関数を参照した自由変数を指す.閉鎖されました
    def foo():
        c = [0]
        def ine():
            c[0] += 1  #   ine       c      ,         
            return c[0]
        return ine  #ine       
    f = foo()  #f       
    print(f())#    foo
  • cは関数foo関数で定義され、Ineの使用方法はcの要素に値を修正することである.変数を再定義するのではなく、nonlocalキーワードnonlocalキーワードを使用して、変数をローカル役割ドメインで定義せず、上位レベルのローカル役割ドメインで定義するようにマークしますが、グローバル役割ドメインで定義することはできません.
  • def counter():
        count = 0
        def inc():
            nonlocal count
            count += 1
            return count
        return inc
    foo = counter()
    print(foo())
  • countは外層関数の局所変数であり、内部関数によって
  • を参照する.
  • 内部関数nonlocalキーワードを使用してcount変数をローカル役割ドメイン定義
  • ではなく上位役割ドメインで宣言します.