ネストされた関数とグローバルとnonlacal

I.ネストされた関数

  1. 限り会ったとして()関数が呼び出されます。いない()関数呼び出しがない場合には
  2. 実行順序機能
def fun1():   
    print(111)  
def fun2():   
    print(222)   
    fun1()   
fun2()
print(111)

1548388589142

def fun2():   
    print(222)   
    def fun3():       
        print(666)   
    print(444)   
    fun3()   
    print(888)
print(33)
fun2()
print(555)

1548388743478

# 函数中套函数
def func():
    a = 1
    def foo():
        b = 2
        print(b)  # 2
        print(a)  # 1
        def f1():
            print(b) # 2
        return f1()
    return foo()
print(func())
------------------------------------
# 函数嵌套调用
def func():
    a = 1
    foo()
    print(a)

def foo():
    b = 2
    print(b)
func()
-------------------------------------
# 函数嵌套参数的传递
def func(a):
    foo(a) #10

def foo(e):
    b(e) # return 10

def b(c):
    print(c)
    return 10

print(func(5))
-------------------------------------
# 函数嵌套返回值的传递
def func(a):
    foo(a) #10
    return 10
def foo(e):
    b(e)  
    return 10
def b(c):
    print(c)
    return 10

print(func(5))

二.gloabal、非ローカル

まず、最初のグローバル変数を宣言して、ローカル変数を呼び出し、この変数の値を変更し、このコードを書きます

a = 100
def func():   
    global a    # 加了个global表示不再局部创建这个变量了. 而是直接使用全局的a   
    a = 28   
print(a)
func()
print(a)

グローバル表現。もはやローカルスコープの内容を使用しません。変数のグローバルスコープに切り替え

グローバル狙い

それが作成するために、グローバル変数に存在しない場合は、関数内でグローバル変数を変更します。

lst = ["麻花藤", "刘嘉玲", "詹姆斯"]
def func():   
    lst.append("⻢云")   
    # 对于可变数据类型可以直接进⾏访问
   print(lst)
func()
print(lst)

ローカル以外の目的

ローカル以外の修正1つの変数のみ、変数の一つは、その上に1つのアップが見つからないだけで、最も外側の層の機能を見つけるために、グローバルな変更を見つけることができません場合

a = 10
def func1():   
    a = 20   
    def func2():
        nonlocal a       
        a = 30       
        print(a)  
    func2()   
    print(a)
func1()


结果:
加了nonlocal
30
30

不加nonlocal
30
20

見て、多くの層を入れ子になった場合、どのような効果は次のようになります。

a = 1
def fun_1():   
    a = 2   
    def fun_2():       
        nonlocal a       
        a = 3       
        def fun_3():           
            a = 4           
            print(a)       
        print(a)       
        fun_3()       
        print(a)   
    print(a)   
    fun_2()   
    print(a)
print(a)
fun_1()
print(a)

このようなプログラムを理解するために分析することができるならば。スコープ、グローバル、ローカル以外の問題はないので

おすすめ

転載: www.cnblogs.com/luckinlee/p/11620104.html