2013-11-04 41 views
1

嗨Python程序員,Python的方式:在瓦爾字典

在我的劇本,我有一些設置變量,這是由一個函數生成,並在字典返回。 這些設置變量被傳遞給幾個函數。我試圖寫我的代碼容易閱讀,所以我想知道你更喜歡哪種符號?

def fooA(a,b,c): 
    return a+b+c 

def fooB(D,c): 
    return D['a']+D['b']+c 


settings = { 'a':1, 'b':2 } 
c = 3 

print fooA(settings['a'],settings['b'],c) 
print fooB(settings,c) 

或者你認爲最好的方法是不要把設置變量換成字典嗎?

+2

您不應該使用'set'作爲變量名稱。它將覆蓋內建。 – Tim

+0

@Tim:當然,我改變了我的例子! –

回答

2

我當然不是Pythonic的專家,但我認爲這很糟糕。

使用一個對象,或者a named tuple或其他東西。在我看來,字典訪問語法對於類似設置的東西並不是很好。

2

在字典中存儲設置(實際上是鍵值對)絕對可以(這可能是實現此目的的最佳方式)。正如你在例子中顯示的那樣,你的代碼變得更短,更容易理解。

Django將其設置存儲在字典中。

mod_wsgi在字典中存儲請求環境(標題),這些是實際設置。

os.environ是一本字典。

2

使用了設置的字典或類似字典的對象就可以了(你可能會想使用一些自定義的不可變類字體對象,但無論如何......),就像任何自定義的「設置」對象FWIW一樣(提示:Python對象大多是榮耀的字典......)。

wrt /你的函數調用,沒有一個通用的答案。第一個版本是「更好」的,因爲它更接近découpled(沒有依賴於你的設置,沒有關於什麼設置被定義的假設等))和更明確的,但是一些代碼與應用程序的設置緊密相關,然後它可能會使更有意義的是要麼通過整個「設置」字典或對象或提供一種方法來檢索它。