首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动保存常量?

如何自动保存常量?
EN

Stack Overflow用户
提问于 2022-01-18 16:03:19
回答 2查看 107关注 0票数 1

我正处于运行实验的过程中,理想的情况是,一旦我的所有代码都正常工作,唯一需要更改的参数都会出现在一个文件中。我最初的想法是将这些参数存储在JSON文件中:

代码语言:javascript
复制
{
    "param1": 1,
    "param2": "string parameter"
}

很明显,我有两个以上的参数。这实际上是一个噩梦,因为我的IDE不会猜测任何参数,这会极大地减缓我的编程速度,因为我通常觉得有义务为我正在工作的当前函数中所需的每个常量创建局部变量。这会导致大量不必要的代码(但是该函数的本地代码比尝试索引JSON对象要方便得多)。

我的下一个想法是:将常量存储在一个文件中,如:

代码语言:javascript
复制
PARAM1 = 1
PARAM2 = 'string parameter'

这方面的问题是,我想将参数与实验结果一起存储,这样我就可以回头看哪些参数被指定来生成这些结果。

除此之外,我的想法是使用dataclass (可能与frozen=True一起使用),因为它们可以转换为字典。但是,我不需要访问类的实例,只需要访问类中的常量。

另一个想法是使用带有静态变量的类:

代码语言:javascript
复制
class ExperimentalMetaData:
    param1 = 1
    param2 = "string parameter"

它可以转换为带有dictvars(ExperimentalMetaData),但这将包含在我开始存储数据之前应该弹出的附加键。

我的问题是:在python中存储常量的最佳方法是如何轻松地将它们保存到JSON文件中,并在代码中轻松地访问这些常量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-18 16:16:26

如果您希望能够回忆不同版本的输入,请给它们一个版本。

这允许您创建类似于JSON的输入文件,并保留一个解析器集合,如果您做了重大更改,解析器可以解析它们。

下面是一个非常简单的例子,它更具有可持续性

代码语言:javascript
复制
class Parser_v1_2(): pass

class Parser_v3_2(): pass

VERSION_PARSER_MAPPING = {
   "1.2": Parser_v1_2,
   "3.2": Parser_v3_2,
}

def parser_map(input_file):
    with open(input_file) as fh:
        input_json = json.load(fh)
    # get version or optionally provide a default
    version = input_json.get("version", "1.0")
    # dynamically select parser
    return VERSION_PARSER_MAPPING[version](input_json)
票数 2
EN

Stack Overflow用户

发布于 2022-01-18 16:09:13

分头解决你的问题。

存储数据

将其序列化为JSON或YAML (甚至csv)。

获取数据

有一个模块来读取您的json,然后设置正确的值。类似于:

代码语言:javascript
复制
# constants.py
from json import load

data = load("dump.json")
const1: str = data["const1"]
const2: str = data["const2"]
const3: int = data["const3"]
代码语言:javascript
复制
# some_other_module.py
from constants import const1, const2 # IDE knows what they are

我只会用模块中的vars手动完成这一操作,因为我需要少量(<20)个vars,并且不想在某些字典或类似的东西中包装。否则,我只会在模块中使用dict。预先用键和None填充dict,并提示它将完成自动完成工作的同样工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70758715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档