我在Python 3.6中使用Argh来创建复杂的命令行函数,但由于我的深度配置文件,在函数中获取参数的默认值需要一长串字典键。
这看起来并不特别可读,因为有一个字典值作为另一个字典的键。它可能会比嵌套更加嵌套 此
可以有更多这样的默认值参数,所以保持这一点会很快变得更加混乱。这只是一个默认参数的例子:
import argh
import config
@arg('-v', '--version')
def generate(
kind,
version=config.template[config.data['default']['template']]['default']['version']):
return ['RETURN.', kind, version]
从我的配置模块中检索版本参数默认值,该模块以列表和字典格式生成大量数据。 尝试更好地解释默认值:
config.template[ # dictionary containing variables for a particular template
config.data['default']['template'] # the default template name set in the main configuration
]['default']['version'] # The default version variable within that particular template
您建议如何使其更具可读性?
答案 0 :(得分:1)
我只是使用与可变默认值相同的技巧。这为您提供了更多可读性的空间。
@arg('-v', '--version')
def generate(kind, version=None):
if version is None:
d = config.data['default']['template']
version = config.template[d]['default']['version']
return ['RETURN.', kind, version]
一个缺点是技术上不同,因为config.data
(或任何一个词组)中的数据可能在定义函数和运行函数之间发生变化。在定义函数之前,您可以执行一次dict查找以减轻它。
# Choose whatever refactoring looks good to you
default_template = config.data['default']['template']
default_version = config.template[default_template]['default']['version']
@arg('-v', '--version')
def generate(kind, version=default_version):
return ['RETURN.', kind, version]
del default_template default_version # Optional
答案 1 :(得分:1)
为什么要在一行:
default_template_id = config.data['default']['template']
default_template = config.template[default_template_id]
default_version = default_template['default']['version']
def generate(kind, version=default_version):
return ['RETURN.', kind, version]