我知道從紅寶石settingslogic
- gem
。這允許以非常優雅的方式爲您的應用程序定義默認設置或備用設置,如settingslogic example中所述。應用程序的默認設置
我正在通過PyYaml
閱讀,但沒有找到這樣一個很好的方法來做到這一點。
你會如何以優雅和pythonic的方式解決這個問題?
我知道從紅寶石settingslogic
- gem
。這允許以非常優雅的方式爲您的應用程序定義默認設置或備用設置,如settingslogic example中所述。應用程序的默認設置
我正在通過PyYaml
閱讀,但沒有找到這樣一個很好的方法來做到這一點。
你會如何以優雅和pythonic的方式解決這個問題?
我不確定爲什麼你期望YAML解析庫提供多層設置回退。 Ruby的YAML解析庫肯定沒有,這就是爲什麼有獨立的包裝寶石,就像你在第一個地方提到的。
但是,如果你看看你鏈接的是什麼,那麼庫中根本就沒有任何邏輯;應用程序邏輯代碼必須使用||=
來設置缺失值。你可以在Python中做同樣的事情;它只是拼寫不同而已。
在Ruby中,您使用點的訪問,如果你想在缺少關鍵,括號中的例外,如果你想nil
,括號加上||
如果你想有一個不同的默認值,和稍微哈克,但地道的括號加上||=
如果你想設置並返回一個不同的默認值。
在Python中,您使用括號,如果你想在缺少鍵,get
一個例外,如果你想None
,get
有說法是你想有一個不同的默認值,setdefault
如果要設置並返回不同的默認。所以,這個Ruby代碼:
>> settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
...看起來像這樣在Python:
>>> settings['messaging'].setdefault('queue_name', 'user_mail')
user_mail
PyYaml是YAML解析庫;你爲什麼期望它等同於Ruby多層設置庫? – abarnert