应用程序的默认设置

时间:2013-08-19 21:47:28

标签: python python-3.x yaml pyyaml

我知道来自ruby的settingslogic - gem。这样可以非常优雅地为您的应用定义默认设置或后备设置,如settingslogic example中所述。

我正在阅读PyYaml但是还没有找到这么好的方法。

你会如何以优雅和pythonic的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

我不确定您为什么期望YAML解析库提供多层设置回退。 Ruby的YAML解析库肯定没有,这就是为什么有一些独立的包装宝石,就像你首先提到的那样。

但如果你看一下你所链接的内容,那么库中根本就没有任何逻辑;如果缺少值,应用程序逻辑代码必须使用||=来设置值。你可以用Python做同样的事情;它只是拼写不同。

在Ruby中,如果你想要一个缺失密钥的例外,你可以使用点访问,如果你想要nil,括号加||如果你想要一个不同的默认值,一个稍微hacky,你可以使用括号如果要设置并返回不同的默认值,请使用惯用括号加||=

在Python中,如果你想要一个缺失密钥的例外,你可以使用括号,get如果你想要Noneget带参数你想要一个不同的默认值,setdefault 1}}如果要设置并返回其他默认值。所以,这个Ruby代码:

>> settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"

...在Python中看起来像这样:

>>> settings['messaging'].setdefault('queue_name', 'user_mail')
user_mail