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



  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值