2013-08-19 238 views
0

我知道從紅寶石settingslogic - gem。這允許以非常優雅的方式爲您的應用程序定義默認設置或備用設置,如settingslogic example中所述。應用程序的默認設置

我正在通過PyYaml閱讀,但沒有找到這樣一個很好的方法來做到這一點。

你會如何以優雅和pythonic的方式解決這個問題?

+0

PyYaml是YAML解析庫;你爲什麼期望它等同於Ruby多層設置庫? – abarnert

回答

1

我不確定爲什麼你期望YAML解析庫提供多層設置回退。 Ruby的YAML解析庫肯定沒有,這就是爲什麼有獨立的包裝寶石,就像你在第一個地方提到的。

但是,如果你看看你鏈接的是什麼,那麼庫中根本就沒有任何邏輯;應用程序邏輯代碼必須使用||=來設置缺失值。你可以在Python中做同樣的事情;它只是拼寫不同而已。

在Ruby中,您使用點的訪問,如果你想在缺少關鍵,括號中的例外,如果你想nil,括號加上||如果你想有一個不同的默認值,和稍微哈克,但地道的括號加上||=如果你想設置並返回一個不同的默認值。

在Python中,您使用括號,如果你想在缺少鍵,get一個例外,如果你想Noneget有說法是你想有一個不同的默認值,setdefault如果要設置並返回不同的默認。所以,這個Ruby代碼:

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

...看起來像這樣在Python:

>>> settings['messaging'].setdefault('queue_name', 'user_mail') 
user_mail 
相關問題