一直在工作也没空写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存储,并非顺序。