我知道来自ruby的settingslogic
- gem
。这样可以非常优雅地为您的应用定义默认设置或后备设置,如settingslogic example中所述。
我正在阅读PyYaml
但是还没有找到这么好的方法。
你会如何以优雅和pythonic的方式解决这个问题?
答案 0 :(得分:1)
我不确定您为什么期望YAML解析库提供多层设置回退。 Ruby的YAML解析库肯定没有,这就是为什么有一些独立的包装宝石,就像你首先提到的那样。
但如果你看一下你所链接的内容,那么库中根本就没有任何逻辑;如果缺少值,应用程序逻辑代码必须使用||=
来设置值。你可以用Python做同样的事情;它只是拼写不同。
在Ruby中,如果你想要一个缺失密钥的例外,你可以使用点访问,如果你想要nil
,括号加||
如果你想要一个不同的默认值,一个稍微hacky,你可以使用括号如果要设置并返回不同的默认值,请使用惯用括号加||=
。
在Python中,如果你想要一个缺失密钥的例外,你可以使用括号,get
如果你想要None
,get
带参数你想要一个不同的默认值,setdefault
1}}如果要设置并返回其他默认值。所以,这个Ruby代码:
>> settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
...在Python中看起来像这样:
>>> settings['messaging'].setdefault('queue_name', 'user_mail')
user_mail