【发布时间】:2018-03-05 00:53:41
【问题描述】:
我正在编写代码,需要打开一个 JSON 文件,该文件包含与软件使用相关的一般配置,将其解析为 dict 并可能覆盖其某些值。这些配置需要在运行时多次访问以检查设置。
例如:其中一个配置是“用户名”和“密码”,如果不存在则需要用户填写,否则直接读取。另一个配置与“软件应该如何工作”有关,可能有“模式 A”、“模式 B”和“模式 C”的值。
问题是:我不是程序员,我想不出一个好的设计来管理配置。我应该打开 JSON 文件,每次需要时重写并保存它,还是将其解析为一个变量并将该变量保存在内存中,直到我不再需要它(就在代码完成运行之前),然后将其保存到最后的 JSON 文件?
另一个问题是:如果我更喜欢将其解析为变量并保留到程序结束,我应该怎么做?这个变量需要被几个函数访问,所以我认为我应该使用一个全局变量,但我读过使用“全局”语句写入全局变量是一种不好的做法,可能会导致混乱。示例:
import json
config_global = None
def read_JSON_file():
config_file = open(r'config_file.json')
global config_global
config_global = json.load(config_file)
config_file.close()
def functionA():
global config_global
# Do something with config_global
def functionB():
global config_global
# Do something with config_global
def save_JSON_file()
config_file = open(r'config_file.json', 'w')
json.dump(config_global, config_file)
config_file.close()
read_JSON_file()
functionA()
functionB()
save_JSON_file()
我还认为我可以在函数调用之间传递配置变量引用,但我不知道这是否是一个好的解决方案,因为我必须为每个函数传递它,每次:
import json
def read_JSON_file() -> dict:
config_file = open(r'config_file.json')
config = json.load(config_file)
config_file.close()
return config
def functionA(config: dict):
# Do something with config
def functionB(config: dict):
# Do something with config
def save_JSON_file(config: dict)
config_file = open(r'config_file.json', 'w')
json.dump(config, config_file)
config_file.close()
parsed_config = read_JSON_file()
functionA(parsed_config)
functionB(parsed_config)
save_JSON_file(parsed_config)
我还阅读了与使用单例相关的内容,但我不完全了解它是如何工作的,或者它是否是一个好的解决方案。
最终,我想知道什么是解决这个问题的好方法。请向我展示我在实施过程中可能遇到的问题,并随意提出更好的解决方案。
感谢您的关注和帮助。
【问题讨论】:
-
我是一名程序员,我想不出一个好的设计来管理配置。
标签: python json configuration