Python:在字典中存储设置 vs argparse.Namespace
Python: storing settings in dictionary vs argparse.Namespace
我正在做一些科学模拟的工作,用 Python 编写。我继承了代码。 sim 有几个 (~15–20) 个参数,可以从 运行 运行 变化——主要是数字变量,加上一些布尔标志。 Python 主脚本将这些参数作为命令行参数并使用 argparse
将它们存储在 argparse.Namespace
对象中。
在实践中,参数值不是在命令行上输入,而是存储在 shell 脚本中以便于重用。这些脚本除了用于 运行 具有相关命令行参数的 Python 脚本之外没有任何实际用途。
我想将参数集存储在人类可读(特别是科学家可读)和 Python 可解析的配置文件中,并免除 shell 脚本和 argparse
一共。这样做的结果是我会将参数存储在字典中而不是 Namespace
.
将设置存储在字典中有什么缺点吗?除了 params.spam
比 params['spam']
?
稍微简洁一点
dict
是 argparse
最终用于承载其 Namespace
的,因此,直接使用一个没问题。
Module ConfigParser
, https://docs.python.org/2/library/configparser.html ,将解析一个相当正常的配置文件并为您存储设置。但是,它是按部分排列的。要提取单个部分 'foo'
,给定填充的配置解析器对象 cp
,
adict = dict(cp.items('foo'))
会起作用。
为了更容易访问语法,您可以使用 http://code.activestate.com/recipes/52308-the-simple-but-handy-collector-of-a-bunch-of-named/(一个老歌但金曲:-)...
Ipython
集成配置文件和命令行值。有默认配置文件和用户配置文件。 argparse
参数是从配置文件创建的。因此,值是在多个级别设置和修改的。我必须深入研究代码才能确定,但我认为这些值最终存储在 config
生成的结构类型中,而不是 argparse.Namespace
.
在内部,argparse
使用 getattr
和 setattr
访问命名空间。允许最大程度地自由设置属性名称。命名空间 class 非常简单,有一些比较和显示的方法。
命名空间值可以通过如下简单语句添加到字典中:
d.update(vars(p.parse_args()))
我会考虑使用 argparse.SUPPRESS
将默认值保留在命名空间之外,从而防止它们更改字典中已经存在的值。
我正在做一些科学模拟的工作,用 Python 编写。我继承了代码。 sim 有几个 (~15–20) 个参数,可以从 运行 运行 变化——主要是数字变量,加上一些布尔标志。 Python 主脚本将这些参数作为命令行参数并使用 argparse
将它们存储在 argparse.Namespace
对象中。
在实践中,参数值不是在命令行上输入,而是存储在 shell 脚本中以便于重用。这些脚本除了用于 运行 具有相关命令行参数的 Python 脚本之外没有任何实际用途。
我想将参数集存储在人类可读(特别是科学家可读)和 Python 可解析的配置文件中,并免除 shell 脚本和 argparse
一共。这样做的结果是我会将参数存储在字典中而不是 Namespace
.
将设置存储在字典中有什么缺点吗?除了 params.spam
比 params['spam']
?
dict
是 argparse
最终用于承载其 Namespace
的,因此,直接使用一个没问题。
Module ConfigParser
, https://docs.python.org/2/library/configparser.html ,将解析一个相当正常的配置文件并为您存储设置。但是,它是按部分排列的。要提取单个部分 'foo'
,给定填充的配置解析器对象 cp
,
adict = dict(cp.items('foo'))
会起作用。
为了更容易访问语法,您可以使用 http://code.activestate.com/recipes/52308-the-simple-but-handy-collector-of-a-bunch-of-named/(一个老歌但金曲:-)...
Ipython
集成配置文件和命令行值。有默认配置文件和用户配置文件。 argparse
参数是从配置文件创建的。因此,值是在多个级别设置和修改的。我必须深入研究代码才能确定,但我认为这些值最终存储在 config
生成的结构类型中,而不是 argparse.Namespace
.
在内部,argparse
使用 getattr
和 setattr
访问命名空间。允许最大程度地自由设置属性名称。命名空间 class 非常简单,有一些比较和显示的方法。
命名空间值可以通过如下简单语句添加到字典中:
d.update(vars(p.parse_args()))
我会考虑使用 argparse.SUPPRESS
将默认值保留在命名空间之外,从而防止它们更改字典中已经存在的值。