說明:i 和foo()都為全局變量,i 是在模塊文件頂層注冊的,所以為全局變量,他能夠在函數內部進行引用而不需要再特意聲明是全局變量,且foo()函數也是全局變量
1.當沒有局部變量時,print(i,'in foo()'),根據LEGB規則,打印的是全局變量;print(i,'global')也是全局變量
如下
i = 1 def foo(): print(i,'in foo()') #局部變量 print(i,'global') #全局變量 foo() print(i,'未定義') #輸出 1 global 1 in foo() 1
2.當設置局部變量時,print(i,'in foo()') 打印局部變量,print(i,'global'),打印全局變量,print(i,'未定義'),打印全局變量 1
i = 1 def foo(): i=5 print(i,'in foo()') #局部變量 print(i,'global') #全局變量 foo() print(i,'未定義') #輸出 1 global 5 in foo() 1 未定義
3.當把局部變量設置成global 全局變量時,print(i,'in foo()'),打印的還是局部變量,print(i,'global'),沒有變量,始終是def 之前定義的變量i=1;
print(i,'未定義'),根據LEGB 規則,尋找全局變量,因全局變量設置為i =5,打印出來也是5
i = 1 def foo(): global i i=5 print(i,'in foo()') #局部變量 print(i,'global') #全局變量 foo() print(i,'未定義') #輸出 1 global 5 in foo() 5 未定義