Pythonic 从配置文件读取
我有一个Python类,它使用ConfigParser来读取配置文件:
配置文件:
[geography]
Xmin=6.6
Xmax=18.6
Ymin=36.6
YMax=47.1
Python代码:
class Slicer:
def __init__(self, config_file_name):
config = ConfigParser.ConfigParser()
config.read(config_file_name)
# Rad the lines from the file
self.x_min = config.getfloat('geography', 'xmin')
self.x_max = config.getfloat('geography', 'xmax')
self.y_min = config.getfloat('geography', 'ymin')
self.y_max = config.getfloat('geography', 'ymax')
我觉得最后四行代码有点重复,应该能压缩成一行更简洁的Python代码,这样可以为每个项目创建一个self.item
变量。
有什么好主意吗?
亚当
更新:
根据你们的回答,我修改了我的代码为:
for item in config.items('geography'):
setattr(self, '_'+item[0], float(item[1]))
现在,
print self.__dict__
>>> {'_xmax': 18.600000000000001, '_ymax': 47.100000000000001,
'_ymin': 36.600000000000001, '_xmin': 6.5999999999999996}
3 个回答
1
你可以试试这样的写法:
for key in ['xmin','xmax','ymin','ymax']: self.__dict__[key] = config.getfloat('geography',key);
注意,上面的写法会把值赋给self.xmin,而不是self.x_min……不过,如果你觉得这个命名没问题,那这样就可以用了……否则,去处理这些名字之间的对应关系会比原来的代码还要多。
5
我通常会尽量避免在构造函数里进行外部操作,因为这样会让代码测试变得困难。与其传一个文件名,不如传一个配置解析器的实例或者一个类似函数式编程的对象。
3
这段代码的意思是……
首先,它定义了一些变量,这些变量可以用来存储信息。接着,它会执行一些操作,比如计算、比较或者是处理数据。最后,它可能会输出一些结果,让我们看到这些操作的结果是什么。
在编程中,代码块就像是一个小工具箱,里面装着我们需要用到的工具。我们可以随时打开这个工具箱,拿出需要的工具来完成我们的任务。
总之,这段代码的目的是为了让计算机按照我们的指示去做事情,帮助我们解决问题或者完成某个任务。
for line in ['x_min', 'x_max', 'y_min', 'y_max']:
setattr(self, line, config.getfloat('geography', line.replace('_', '')))