Python多模組全域性變數引用和修改
定義三個py檔案: g1.py, t1.py, t2.py
其中g1.py定義了兩個全域性變數,而t1.py和t2.py引用g1.py模組。三個模組檔案都具有修改和列印全域性變數的方法。
根據以下程式碼的執行結果,可以得出:原始定義模組中的全域性變數,和引用模組中的全域性變數應該不在同一個名稱空間中。
(1) g1.py為全域性變數的原始定義檔案。 g1.py中全域性變數的值不會受引用他的模組(t1.py和t2.py)的影響。也就是說,g1中呼叫t1.py和t2.py的函式修改全域性變數,
g1.py中全域性變數的值不受影響。而g1.py中自身的修改函式會影響自己的變數值。
同時,t1.py和t2.py中全域性變數的值,也不會受g1.py的影響。即在g1.py中呼叫g1的修改函式,不會影響到t1.py和t2.py中全域性變數的取值。
(2) t1.py和t2.py 都引用了g1模組。t1.py和t2.py中修改全域性變數,在他們之間都是可見的。即t1.py修改了全域性變數, t2.py可以感知到。在t2.py修改全域性變數的值,
在t1.py中可以感知到。t1.py和t2.py引用的全域性變數應該在同一個命令空間中,修改時相互可見。
*********************************************************************************************************************************************
g1.py 原始碼:
import t1 import t2 gl_1 = '000' gl_2 = '000' def change_info(): global gl_1, gl_2 gl_1 = '555' gl_2 = '666' def print_info(): print gl_1, gl_2 if __name__ == '__main__': t1.t1_print_g1() t2.t2_print_g1() print_info() print "="*10 t2.t2_change_g1() t1.t1_print_g1() t2.t2_print_g1() print_info() print"="*10 t1.t1_change_g1() t1.t1_print_g1() t2.t2_print_g1() print_info() print "="*10 change_info() t1.t1_print_g1() t2.t2_print_g1() print_info()
g1.py執行的結果:
000 000
000 000
000 000
==========
333 444
333 444
000 000
==========
111 222
111 222
000 000
==========
111 222
111 222
555 666
*********************************************************************************************************************************************
t1.py 原始碼:
import g1 import t2 def t1_change_g1(): g1.gl_1 = '111' g1.gl_2 = '222' def t1_print_g1(): print g1.gl_1, g1.gl_2 if __name__ == '__main__': t1_print_g1() t2.t2_print_g1() g1.print_info() print "="*10 t2.t2_change_g1() t1_print_g1() t2.t2_print_g1() g1.print_info() print "="*10 t1_change_g1() t1_print_g1() t2.t2_print_g1() g1.print_info() print "="*10 g1.change_info() t1_print_g1() t2.t2_print_g1() g1.print_info()t1.py執行的結果:
000 000
000 000
000 000
==========
333 444
333 444
333 444
==========
111 222
111 222
111 222
==========
555 666
555 666
555 666
*********************************************************************************************************************************************
t2.py 原始碼:
import t1 import g1 def t2_change_g1(): g1.gl_1 = '333' g1.gl_2 = '444' def t2_print_g1(): print g1.gl_1, g1.gl_2 if __name__ == '__main__': t1.t1_print_g1() t2_print_g1() g1.print_info() print "="*10 t2_change_g1() t1.t1_print_g1() t2_print_g1() g1.print_info() print "="*10 t1.t1_change_g1() t1.t1_print_g1() t2_print_g1() g1.print_info() print "="*10 g1.change_info() t1.t1_print_g1() t2_print_g1() g1.print_info()
t2.py執行的結果:
000 000
000 000
000 000
==========
333 444
333 444
333 444
==========
111 222
111 222
111 222
==========
555 666
555 666
555 666