pythonにおけるローカル変数とグローバル変数の役割ドメイン

2428 ワード

ローカル変数:関数の内部で定義され、関数の内部に作用します.ライフサイクル:変数の作成から関数の終了まで死亡します.グローバル変数:定義.pyモジュールの内部は、全体に作用する.pyモジュール.ライフサイクル:変数の作成から.pyモジュールが死亡しました.次に、その役割ドメインをケースで具体的に説明します:(1):
def Demo1():
    num = 1
    print(num)

Demo1()
print(num)
	
"""
  num     ,           num     ,
       :NameError: name 'num' is not defined
"""

(2)
num = 0

def Demo1():
    num = 1
    print(" demo1    :",num)

def Demo2():

    print(" demo2    :",num)

Demo1()
Demo2()

print("         :",num)
"""
     :
 demo1    : 1
 demo2    : 0
         : 0
  :
       ,   demo1 num = 1,  demo1     ,     num   0;   python ,             ,                 ,         。           ,        global  。

"""
#      
num = 0

def Demo1():
    global num
    num = 1
    print(" demo1    :",num)

def Demo2():

    print(" demo2    :",num)

Demo1()
Demo2()

print("         :",num)
""'
     :
 demo1    : 1
 demo2    : 1
         : 1
"""

(3)グローバル変数が可変データクラスである場合、可変データ型を修正する方法により、可変タイプの内容を修正し、グローバル変数の修正を実現することができる.(ここでは、可変データ型が変更されるとメモリにデータの値が変更されるため)
num_list = [1,2,3]

def Demo1(demo1_list):
    demo1_list.append(4)
    print(" demo1    :",demo1_list)

def Demo2():

    print(" demo2    :",num_list)

Demo1(num_list)
Demo2()

print("         :",num_list)
	

	

"""
    :
 demo1    : [1, 2, 3, 4]
 demo2    : [1, 2, 3, 4]
         : [1, 2, 3, 4]
"""

(4)リスト+=と+の違い
+
num_list = [1,2,3]

def Demo1(demo1_list):
    demo1_list = demo1_list + [4,5,6]
    print(" demo1    :",demo1_list)

def Demo2():

    print(" demo2    :",num_list)

Demo1(num_list)
Demo2()

print("         :",num_list)
    :
 demo1    : [1, 2, 3, 4, 5, 6]
 demo2    : [1, 2, 3]
         : [1, 2, 3]


+=:
num_list = [1,2,3]

def Demo1(demo1_list):
    demo1_list +=  [4,5,6]
    print(" demo1    :",demo1_list)

def Demo2():

    print(" demo2    :",num_list)

Demo1(num_list)
Demo2()

print("         :",num_list)
  :
 demo1    : [1, 2, 3, 4, 5, 6]
 demo2    : [1, 2, 3, 4, 5, 6]
         : [1, 2, 3, 4, 5, 6]

なぜなら、+番号操作では、可変オブジェクトと非可変オブジェクトが両方とも__を呼び出すからです.add__操作
+=番号アクションの場合、可変オブジェクト呼び出し_add__,可変オブジェクトによって呼び出されるのは__です.iadd__(可変オブジェクトなし__iadd_)_iadd__その場で修正