Functionオブジェクト、スコープと名前空間

Functionオブジェクト

Pythonオブジェクト内のすべて

引用文

def f1():
    print('from f1')
    
func = f1
print('f1:', f1)
print('func', func)

# 打印结果:
f1: <function f1 at 0x000002110991D268>
func <function f1 at 0x000002110991D268>

関数のパラメータとして、

def f1():
    print('from f1')


def f2(f2_f1):
    print('f2_f1:', f2_f1)

f2(f1)
print('f1:', f1)

# 打印结果:
f2_f1: <function f1 at 0x000001E47029D268>
f1: <function f1 at 0x000001E47029D268>

関数の戻り値として、

def f1():
    print('from f1')
    
    
def f2(f2_f1):
    return f2_f1

res = f2(f1)
print('res:', res)
print('f1:', f1)

# 打印结果:
res: <function f1 at 0x0000019F13E7D268>
f1: <function f1 at 0x0000019F13E7D268>

容器として希土類元素

def f1():
    print('from f1')


lt = [f1, 12, 3, 4, 5]
lt[0]()

小演習

def pay():
    print('支付1e成功')

def withdraw():
    print('提现2e成功')

dic = {
    '1': pay,
    '2': withdraw
}

while True:
    msg = '''
    '1': 支付,
    '2': 提现,
    '3': 退出,
    '''
    print(msg)
    choice = input('>>: ').strip()
    if choice == '3':
        break

    elif choice in dic:
        dic[choice]()

ネストされた関数

ネストされた関数の内部機能

def f1():
    print('from f1')

    def f2():
        print('from f2')
    f2()

f1()

名前空間とスコープ

名前空間

ビルトイン名前空間

収納スペースの組み込みメソッド

データ型の方法ビルトイン; Pythonインタプリタ自身方法(印刷/ LEN /リスト/ STR / dictの)

グローバル・ネームスペース

加えて、組み込みのグローバルとローカルコール

ローカル名前空間

関数定義内のローカルコール

実行の名前空間順序(生成)

  1. ビルトイン名前空間:がある場合のpythonインタプリタを開始します
  2. グローバル・ネームスペース:タイムコードの実行可能ファイルは、グローバルを持っています
  3. ローカル名前空間:時間関数の呼び出しは、ローカルを持っています

検索順序

見つけるために現在の位置から、後方に見ていない、そのために見つけることができません:ローカル>グローバル>内蔵>エラー

スコープ

グローバルスコープ

内蔵の名前空間+グローバル名前空間 - >グローバルスコープ

ローカルスコープ

ローカル名前空間 - >ローカルスコープ

  • グローバルスコープとローカルスコープX Xなしの関係
  • ローカルスコープ×1×2とローカルスコープは、何もしなくても同じローカルスコープ内のローカルスコープとローカルスコープ2

グローバルキーワード

x = 10
def func():
    global x
    x = 20

func()
print(x)   # 打印20

ローカル以外のキーワード

x = 10
def f1():
    x = 2

    def f2():
        nonlocal x   # nonlocal让x成为额顶层函数的局部,不是让它成为全局
        x = 30

    f2()
    print(x)

f1()
# 打印30

注意点

すべての変数のデータ型は、上記のすべてのルールを破ることができます

lt = [10]

def f1():
    lt.append(20)

f1()
print(lt)

# 打印结果:
[10,20]

おすすめ

転載: www.cnblogs.com/setcreed/p/11566637.html
おすすめ