1. 程式人生 > >Python多模組全域性變數引用和修改

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