19.4.2 配置文件
虽然可以为自己方便而提取常量,但有些常量必须暴露给用户。例如,如果用户不喜欢你编写的GUI程序的背景色,可能应该允许他们使用其他颜色;对于你开发的街机游戏,可让用户决定启动时显示的问候消息;对于你开发的Web浏览器,可让用户决定默认显示的起始页面。
可将这些配置变量放在独立的文件中,而不将它们放在模块开头。为此,最简单的方式是专门为配置创建一个模块。例如,如果PI是在模块文件config.py中设置的,就可在主程序中像下面这样做:
from config import PI
这样,如果要修改PI的值,只需编辑config.py,而不用在代码中搜索。
警告 使用配置文件有利有弊。一方面,配置很有用;但另一方面,使用针对整个项目的中央共享变量库可能降低项目的模块化程度(即增大耦合程度)。因此,使用配置文件时,务必不要破坏抽象(如封装)。
另一种方法是使用标准库模块configparser,从而可在配置文件中使用标准格式。这样既可使用Python标准赋值语法,如下所示(这将在字符串中添加两个多余的引号):
greeting = 'Hello, world!'
也可使用很多程序都采用的另一种配置格式:
greeting: Hello, world!
必须使用[files]、 [colors]等标题将配置文件分成几部分( section)。标题的名称可随便指定,但必须将它们用方括号括起。代码清单19-1是一个简单的配置文件,而代码清单19-2是一个使用该配置文件的程序。要深入了解模块configparser提供的功能,请参阅库文档。
代码清单19-1 一个简单的配置文件
[numbers]
pi: 3.1415926535897931
[messages]
greeting: Welcome to the area calculation program!
question: Please enter the radius:
result_message: The area is
代码清单19-2 一个使用ConfigParser的程序
from configparser import ConfigParser
CONFIGFILE = "area.ini"
config = ConfigParser()
# 读取配置文件:
config.read(CONFIGFILE)
# 打印默认问候语( greeting):
# 在messages部分查找问候语:
print(config['messages'].get('greeting'))
# 使用配置文件中的提示( question)让用户输入半径:
radius = float(input(config['messages'].get('question') + ' '))
# 打印配置文件中的结果消息( result_message);
# 以空格结束以便接着在当前行打印:
print(config['messages'].get('result_message'), end=' ')
# getfloat()将获取的值转换为浮点数:
print(config['numbers'].getfloat('pi') * radius**2)
在本书后面的项目中,不会涉及太多有关配置的细节,但建议你考虑让程序是可配置的。这样,用户就可根据自己的偏好修改程序,可能让他们使用程序时的心情更为愉悦。毕竟使用软件时面临的主要挫折之一是不能让它按自己希望的方式行事。
领取专属 10元无门槛券
私享最新 技术干货