如何在函数参数中编写更干净的超长词典?
How to write super long dictionaries cleaner in function arguments?
我在 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
您有什么建议可以提高可读性?
我将使用与可变默认值相同的技巧。这为您提供了更多空间来编写更具可读性的内容。
@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
(或任何字典)中的数据可能会在定义函数时和定义函数时发生变化它是 运行。您可以在定义函数之前执行一次字典查找以减轻这种情况。
# 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
为什么要在一条线上:
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]
我在 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
您有什么建议可以提高可读性?
我将使用与可变默认值相同的技巧。这为您提供了更多空间来编写更具可读性的内容。
@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
(或任何字典)中的数据可能会在定义函数时和定义函数时发生变化它是 运行。您可以在定义函数之前执行一次字典查找以减轻这种情况。
# 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
为什么要在一条线上:
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]