Pythonの基礎 - 関数スコープ

機能

Functionオブジェクト

  • 関数はファーストクラスのオブジェクト
  • 関数名をすることができます参照することが
  • 関数名はとして使用することができますパラメータを使用します
  • 関数名は次のように使用することができ、戻り値の使用
  • 関数名はとして使用することができ、コンテナ型の要素

ネストされた関数

  • ネストされたコール:関数内の関数を呼び出します

  • ネストされた定義:関数が関数内で定義されています

名前空間

ストレージ変数名に分けスペース、ビルトイン名前空間グローバル名前空間ローカル名前空間

  • ビルトイン名前空間:Pythonは、事前に定義された名前は、そこに内蔵されている名前空間。例:キーワードは、組み込みの方法

  • グローバル・ネームスペース:ファイルレベル名に保存されているがグローバルネームスペースです

    IF / ながら / のために 内部的に定義された内の名前実行後のグローバルネームスペースに格納されています

    # if 的示例:
    var = 4
    if var > 5:
        var = "var 大于5"
    else:
        var = "var 小于等于5"
    print(var)        # 打印结果:var 小于等于5
    
    # while 的示例:
    num = 0
    while num <= 3:
        num += 1
    print(num)        # 打印结果:4
    
    # for 的示例
    for i in range(2):
        pass
    print(i)      # 打印结果:1
  • ローカル名前空間内部関数の定義は、すべての名前は、組み込みの名前空間機能現在に格納されています

あなたは、変数の値にアクセスする場合は、最初に名前と変数のメモリアドレスの名前と値の間の関係に対応する名前空間、アクセスにアクセスする必要があります。

ライフサイクル

  • ビルトイン名前空間Pythonのインタプリタ始めるテイク効果、クローズ失敗
  • グローバル・ネームスペース現在のpythonファイルの実行が失敗した後力への実行、
  • ローカル名前空間関数が呼び出されたときに有効になり、関数本体のコードはの終わりに消滅

順序を探します

  • ローカル名:ローカルグローバル組み込み関数

  • グローバル名前:グローバル建て

    内蔵のエラー再発見されることはありません

  • 内部関数の中で使用される名前定義フェーズではと、死んで指定された場所を呼び出すために何も

スコープ

  • グローバルスコープグローバル缶コール名はグローバルスコープに存在します。内蔵の名前空間とグローバルネームスペースここに属しています
  • ローカルスコープローカルの名前はローカルスコープ内に存在する呼び出すことができます。ここに属しローカル名前空間

  • 、(株)は、参加無料ローカル名前空間の変数を宣言したとして、グローバル変数

    注:株式会社フリーは関数内で宣言に参加文は関数の外で、機能はまだ動作していない場合は、

    # 这种情况不能修改x1的值
    x1 = 1
    def func1():
        x1 = 2
    func1()
    print(x1)  # 打印结果:1
    
    # 使用global 后,可以修改x2的值
    x2 = 1
    def func2():
        global x2 # 先声明成全局变量
        x2 = 2
    func2()
    print(x2) # 打印结果:2
    
    # global 若在函数外声明,无法操作变量
    global x3
    x3 = 1
    def func2():
        x3 = 2
    func3()
    print(x3) # 打印结果:1
  • 非ローカル:では、ローカルな名前空間宣言ローカル変数

    非ローカル変数宣言の後に変数を見つけるために、現在の関数の関数の外側の層から開始します。最も外側の関数のすべての方法が見つからない場合は、例外がスローされます。

    def f3():
        x = 4
        def f1():
            y = 2
            def f2():
                nonlocal x
                x = 3
            f2()  # 调用f2(),修改f1作用域中名字x的值
            print(x)  # 在f1作用域查看x。打印结果:3
        f1()
        print(x)  # 打印结果:3
    f3()
    def f3():
        x = 4
        def f1():
            x = 2
            def f2():
                nonlocal x
                x = 3
            f2()  # 调用f2(),修改f1作用域中名字x的值
            print(x)  # 在f1作用域查看x。打印结果:3
        f1()
        print(x)  # 打印结果:4
    f3()

おすすめ

転載: www.cnblogs.com/xiaodan1040/p/11837506.html