day10関数オブジェクト、ネストされた名前空間のスコープ

Functionオブジェクト

  • 関数名を挙げることができます。

    def index():
        print('from index')
    a = index  #函数名赋值给a。
    a()     #执行a
  • 関数名をパラメータとして渡すことができます

    def foo(x, y, z):
        print(x, y)
        z()
    
    def bar():
        print('from bar')
    
    foo(1, 2, bar)  # bar = z, z()=bar(),打印:from bar
  • 関数名は、戻り値として使用することができます

    ***パラメータ特別な要件が存在しない場合には、してはならない渡す括弧、その場で実行するブラケット。

    def index():            #第一步:定义函数没有执行
        print('from index')
    def func(a):            #第二步:定义函数
        return a            #第五步:输出from index
    a = func(index)         #第三步执行a,index = a
    a()                     #第四步执行a,相当于index().
  • 関数名は、コンテナ型の要素として使用することができます

    def func():
        print('from func')        #函数定义,没有执行
    
    l1 = [1, 2, 3, func, func()]  #func()直接执行,打印:from func
    f = l1[3]                     #func的出的时他的地址
    print(f)
    
    输出结果:
    from func
    <function func at 0x000001F8D7B63948>
    

ネストされた関数

  • ファンクションネストされた定義は:内部に関数を定義します

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

    def func1(x,y):
        if x > y:
            return x
        else:
            return y
    
    print(func1(1,2))
    
    def func2(x, y, z, a):
        result = func1(x, y)
        result = func1(result, z)
        result = func1(result, a)
        return result
    
    print(func2(1, 200000, 3, 1000))

名前空間

  • 名前空間とは何ですか?

    店舗名スペース

    あなたは変数の値にアクセスしたい場合は、他のパーティなければならない最初の名前空間結合関係は、対応するメモリの名前とアドレスを取得します

  • 名前空間カテゴリー:

    1、ビルトイン名前空間:

    名前のあなたの定義を完了するためのPythonの進歩は、組み込みの名前空間に存在しています

    2、グローバルネームスペース

    ファイルレベルの名前で保存されたグローバルネームスペースです

    内部的に定義された名前のために実行した後、グローバルネームスペースに格納されている間場合

    3、ローカル名前空間

    すべての内部関数の名前は、ストレージの現在の関数で定義され、内蔵された名前空間されています

    ライフサイクル:

    1、内蔵の名前空間

    Pythonインタプリタを有効にするために始めたとき、失敗への通訳の時間をシャットダウン

    2、グローバルネームスペース

    あなたは、現在のページのコード実行の終了が失敗した後、この電流PYファイルを有効にする起動すると、

    3、ローカル名前空間

    あなたは現在の関数の発効を呼び出すと、コードの最後の行の関数本体の端部は、名前空間の順序を見つけるために失敗した場合に実行されます。

順序を探します

  • 名前空間の検索順序:

  • ローカル:ローカル>グローバル>内蔵

  • グローバル:グローバル>ビルトインビルトインエラー#上で見つけることができませんでした

    内部関数はすでに死亡した定義フェーズで指定された名前を使用し、あなたの呼び出しサイト

    x = 111
    def func1():               #第一步
        x = 222
        def func2():           #第三步
            x = 333
            def func3():       #第五步
                x = 444
                def func4():   #第七步
                    x = 555    #第八步
                    print(x)
                    print('from func4')
                func4()        #第八步
            func3()            #第六步
        func2()                #第四步
    func1()                    #第二步
    x = 111    #是全局变量
    def index():
        def wrapper():
            print(x)
    
        return wrapper  #wrapper函数是在局部名称空间,
                         # return结束函数就没有内容了
    index()
    f = index()
    f()

スコープ

  • 分類の範囲:

    1、グローバルスコープ

    グローバルは、グローバルスコープに存在する名前を呼び出すことができます

    内蔵の名前空間+グローバルネームスペース

    2、ローカルスコープ

    ローカルストレージはローカルスコープの名前で呼び出すことができます

    ローカル名前空間

  • グローバル:グローバル変数宣言
  • 非ローカル:ローカル名前空間宣言ローカル変数、ローカルの上位機能で変更変数
  • 唯一の変数型の値は、ローカル外部変数で変更することができます

    golbal 全局变量使用
    x = 1
    def index():
        global x   #声明全局变量,使x = 2与x = 1在同一个级别,
                    #1先赋值给x,2又赋值给x。
        x = 2
    index()
    
    局部变量的修改无法影响上层,上上层
    
    def index():
        x = 1
    
        def index2():
            # nonlocal x
            x = 2
    
        index2()
        print(x)

おすすめ

転載: www.cnblogs.com/lishuangjian/p/11837737.html