***

1958 ワード

1.グローバル変数とローカル変数の定義:
グローバル変数は
全範囲で呼び出せる変数
ローカル変数は関数の内部で呼び出すことができます.
関数が全体に出ると呼び出せない変数を局所変数と呼ぶ
関数だけが自分の「体内」に含まれるものを「局所化」することができる.
例:
name = 'capture'		#   name      
def test():
	name = '   '	#    name     
	print(name)
test()
print(name)			#   name    capture,                name,         ,                		

2.ローカル変数をグローバル変数に変更するにはどうすればいいですか?
上の例では,name=「梁非凡」の前に一言を加えた.
global name
これでnameという局所変数をグローバル変数に変えることができます
ここのglobalはただ1つのチャネルを与えて、関数の内部がこのチャネルを通じてglobalの後ろのグローバル変数に連絡することができます
関数の内部にあるものは、一般的にパラメータを呼び出したり、別のことをしたりしたいのですが、
いずれも関数内部から優先的に探して、見つからないでやっと全局を探します(家で食べ物を食べたいようで、きっと先に家で食べ物を探して、見つからないでやっと食べ物を探しに出かけます)
例:
def test1():
	global name
	print(name)
def test2():
	name = '123'
	print(name)
test1()
test2()
ここのようにtest 1()はすでにnameをグローバル変数に引用しているがtest 2()では基本法に従って局所変数のname='123'を優先的に探している.
最後に、関数のネスト関数にglobalキーワードを使用した場合、
pythonは、前の関数の変数ではなく、最外層のグローバル変数を探します.
前のレベルの関数の変数を呼び出す場合は、キーワードを使用します.
nonlocal
3.提案:変数を宣言する時、グローバルグローバル変数の変数名にローカル変数の変数名に対して異なるものを与えて、それらの名前を異なるようにしたほうがよくて、このようにローカル変数とグローバル変数を区別しやすい
4.ネスト関数の実行順序
ネスト関数もpythonの基本法に従って実行され、前から後までインデントで実行されますが、比較的複雑なので言う価値があります
例:
x = '   0    '                     #1
def a1():                               #2
    x = '        '                #3
    print(x)                            #4
    def a2():                           #5
        x = '        '            #6
        print(x)                        #7
        def a3():                       #8
            x = '        '        #9
            print(x)                    #10
        a3()                            #11
    a2()                                #12
a1()                                    #13
print(x)                                #14

ここでの実行手順は、1-13-3-4-12-6-7-11-9-10-14であるべきである.