python不允许全局变量_[python自动化] 关于python无法修改全局变量的问题

一直在工作也没空写blog..... =。=

在编写python自动化程序的时候,会处理大量的参数。习惯性的处理方式是创建/configs/目录,在目录下存储各种参数。

按参数功能来分,大约可以分为两类:

1. 固定值的全局变量,如存储环境参数,特点是在整个程序中每次调用时,值固定

2. 需要修改的全局变量,如存储pass/fail判定、时间戳等,特点是在程序过程中,会对其进行赋值

#Record in file /configs/global_env.py

PC_HOST = '10.0.0.2'

PC_PORT = 8080

#Global variable test

from configs.global_env import *

print 'PC Host: %s' %PC_HOSTprint 'PC Port: %s' % PC_PORT

执行结果:

PC Host: 10.0.0.2PC Port:8080

另外说一句,from configs.global_env import * 出错,需要在/configs/目录下建立 __init__.py文件,无内容即可

当情况2时:

#Record in file /configs/global_env.py

BEGIN_TIME = None

#Global variable test

from configs.global_env import *

importtimeclassModify_Global_Parameter(object):definit_begin_time(self):

BEGIN_TIME= time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime(time.time()))printBEGIN_TIMEreturnBEGIN_TIMEif __name__ == '__main__':

test=Modify_Global_Parameter()

test.init_begin_time()print BEGIN_TIME

执行结果

2017-02-28_22:09:40None

可以看出,在方法init_begin_time中print BEGIN_TIME,是修改后的结果

但是调用方法结束后,再次打印,仍是原始值(None),这样便无法在其他类、方法中使用这个全局变量

有两个解决方法:

1. 方法1,使用global标识

#Global parameter test

from configs.global_env import *

importtimeclassModify_Global_Parameter(object):definit_begin_time(self):globalBEGIN_TIME

BEGIN_TIME= time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime(time.time()))printBEGIN_TIMEclassPrint_Test(object):defprint_test(self, print_var):printBEGIN_TIMEprintprint_varif __name__ == '__main__':

test=Modify_Global_Parameter()

test.init_begin_time()printBEGIN_TIME#test global variable as parameter.

print_test =Print_Test()

print_test.print_test(BEGIN_TIME)

执行结果:

2017-02-28_22:21:18

2017-02-28_22:21:18

2017-02-28_22:21:18

2017-02-28_22:21:18

可以发现,方法内修改后打印、方法外print、其他类中打印、作为其他方法的参数,均为修改后的结果

方法2:使用字典存储

#Record in file /configs/global_env.py

TIME_STAMP ={ 'BEGIN_TIME': None, 'END_TIME': None,}

#Global parameter test

from configs.global_env import *

importtimeclassModify_Global_Parameter(object):definit_time_stamp(self):

TIME_STAMP['BEGIN_TIME'] = time.strftime("%Y-%m-%d_%H:%M:%S", time.localtime(time.time()))print TIME_STAMP['BEGIN_TIME']classPrint_Test(object):defprint_test(self, print_var):print TIME_STAMP['BEGIN_TIME']printprint_varif __name__ == '__main__':

test=Modify_Global_Parameter()

test.init_time_stamp()print TIME_STAMP['BEGIN_TIME']#test global variable as parameter.

print_test =Print_Test()

print_test.print_test(TIME_STAMP['BEGIN_TIME'])

执行结果:

2017-02-28_22:30:15

2017-02-28_22:30:15

2017-02-28_22:30:15

2017-02-28_22:30:15

同样可以达到目标

将参数存储在字典中,也易于分类和管理,我也更倾向于这种方法。

另外,关于字典的一种打印:

for key inTIME_STAMP:print '%s : %s' % (key, TIME_STAMP[key])

执行结果:

END_TIME : None

BEGIN_TIME :2017-02-28_22:35:48

可以发现打印的key顺序与定义时的不同,这是因为字典的存储方法是Hash存储,并非顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值