介绍
我们编写了许多需要通过外部属性进行自定义的python应用程序,或者我们希望使用非硬编码属性和/或运行时配置属性来自定义或影响行为的应用程序。 对解决方案的各种 google 搜索都会产生教程,这些教程向我们提供了代码示例,这些示例虽然实际上可以工作,但无法针对现实世界的应用程序进行适当的扩展。
这组文章记录了我在实现一个简单、可维护且易于扩展的机制来管理应用程序配置属性的过程中反复重构和重新实现的各种实现过程。
版本Ø
我发现的教程版本只是库开发人员提供的代码片段的扩展,以证明他们的实现有效。 虽然这足以提供概念证明,但这些片段在应用程序的现实世界中无法扩展。
以下代码片段就是一个示例。
import configparser def create_config(): config = configparser.configparser() # add sections and key-value pairs config['general'] = { 'debug': 'true', 'log_level': 'info' } config['database'] = { 'db_name': 'example_db', 'db_host': 'localhost', 'db_port': '5432' } with open('config.ini', 'w') as configfile: config.write(configfile) if __name__ == "__main__": create_config()
登录后复制
虽然这段代码片段确实允许我们保存我们的配置值,但它给我们留下了读取这些保存值的问题。 同样,实现开发人员片段为我们提供了有关如何检索这些值的示例代码,如以下代码片段所示。
import configparser def read_config(): config = configparser.ConfigParser() config.read('config.ini') # Access values from the configuration file debug_mode = config.getboolean('General', 'debug') log_level = config.get('General', 'log_level') db_name = config.get('Database', 'db_name') db_host = config.get('Database', 'db_host') db_port = config.get('Database', 'db_port') # Return a dictionary with the retrieved values config_values = { 'debug_mode': debug_mode, 'log_level': log_level, 'db_name': db_name, 'db_host': db_host, 'db_port': db_port } return config_values if __name__ == "__main__": # Call the function to read the configuration file config_data = read_config() # Print the retrieved values print('Debug Mode', config_data['debug_mode']) print('Log Level', config_data['log_level']) print('Database Name', config_data['db_name']) print('Database Host', config_data['db_host']) print('Database Port', config_data['db_port'])
登录后复制
结论
我在上面的代码中发现了很多问题。 虽然对于小脚本来说这是完全可以接受的,但代码会受到与实际 python 变量名称相关的字符串值的使用及其在大型代码库中潜在扩散的影响。 虽然使用全局常量可能会缓解这种情况,但我认为这是不可扩展的,因为它不遵循 andrew hunt 和 david thomas 在他们的开创性著作《实用程序员》中所倡导的基本软件设计原则,并且未能通过 dry原则,又名“不要重复自己”。
立即学习“Python免费学习笔记(深入)”;
本文的源代码在这里。
请参阅我的下一篇文章,其中记录了解决我概述的一些问题的初步实现。
以上就是迈向轻松的 Python 配置文件版本 Ø的详细内容,更多请关注抖狐科技其它相关文章!
-
python背景颜色设置
在 python 的 tkinter 库中,设置控件背景顏色的方法包括:使用 bg 选项:widget.bg = "color_code";使用 configure() 方法:widget.confi...
-
骁龙8gen4芯片手机上市时间
骁龙 8 gen 4 芯片将于 2023 年第 2 季度上市,搭载该芯片的旗舰手机预计将于 4 月至 6 月期间发布。骁龙 8 Gen 4 芯片手机上市时间 预计上市时间:2023 年第 2 季度 详...
-
崩坏星穹铁道寻圣冒险任务如何玩 寻圣冒险任务玩法介绍
在《崩坏:星穹铁道》中,“寻圣冒险”任务是游戏内一项重要的探索活动,旨在引导玩家深入游戏世界的不同角落,完成一系列富有挑战性的任务,从而获得丰富的奖励和游戏体验。这类任务通常结合了剧情发展、角色互动以...
-
勇闯女巫塔主动技能怎么使用 主动技能使用方法
想要提升《勇闯女巫塔》战斗实力?主动技能的使用至关重要!这些技能不仅能带来可观的优势,更需要合理运用才能发挥最大效力。想知道这些技能如何使用吗?别急,php小编西瓜这就来为你揭秘!勇闯女巫塔主动技能怎...
-
优酷共享vip会员怎么登录
要登录共享的优酷 vip 会员,需要:1. 获取账号和密码;2. 登录优酷并输入信息;3. 获取并提供验证码;4. 享受会员权益。注意:确保账号有效、不更改密码、谨防安全风险。优酷共享 VIP 会员如...