2012-03-02 142 views
3

,我有以下定義的可讀性和功能:改善功能

def heat(number): 

if number == "r": 
    h = 12 
elif number == "b": 
    h = 24 

return h 

不過,我想使它看起來更好,沒有if語句來回答的。有人告訴我,我可以按以下方式做到這一點(我想這樣做,這樣一來,如果我可以在這個特殊的例子,請接受幫助):

def heat(number): 
    m = { "r" : 12, 
      "b" : 24 } 
try: 
    return m[number] 
except KeyError: 
    return 0.0 

然而,我不明白怎麼說將返回'h'的值,這是我想要的。有人可以向我解釋這個方法嗎?此外,我感到困惑,地圖和dictionnaires等先謝謝。

UPDATE

好吧,我得到了上面的例子,但如果我有兩個函數的輸入?

例如

def heat(temp, coeff) 

做我寫的回報:

return m(heat, coeff) 

抑或這不是工作?

回答

0

你也可以使用一個單獨的語句(如果你只有這個有限的選擇):

def heat(number): 
    return 12 if number == "r" else (24 if number == "b" else 0.0) 

不過,如果你需要超過2層的替代品,因爲你提出的字典更好。

您也可避免異常:

def heat(number): 
    m = { "r" : 12, 
      "b" : 24 } 

    return m[number] if number in m else 0.0 
+0

好,謝謝,我顯然必須保持在異常,我試圖避免任何if語句如果可能的話。我仍然不明白,如果沒有在函數中使用它,它將如何返回'h'的值? – user2063 2012-03-02 10:02:49

+0

爲什麼你想避免任何if語句? (try/except機制在內部也可以看作是if語句)。恐怕我不明白你最後的評論。在你的第二個例子中,你的答案的第二部分是基於你的。 – 2012-03-02 10:06:15

+0

這是我被賦予的一項任務。對不起,我可能聽起來有點困惑,但我已經知道我的問題是什麼..我對Python還是比較新的。感謝您的幫助=) – user2063 2012-03-02 10:11:06

1

映射字典

一般來說,映射詞典是兩個詞的意思是相同的事情。它們在很多文獻和許多人中互換使用。

地圖被稱爲是因爲他們這樣做。它們是相互映射的任意值對的集合。給定一對數值中的一個(稱爲),其他()可以相對有效地獲得。除了易於使用,地圖通常用於此效率的目的。 (在你的例子中,兩個「R」和「b」是,和12和24的是其各自。)

嚴格地說,即在Python實現此標準的數據結構被稱爲一個dict的英文字典)及其在文檔中用於描述該概念的詞是映射對象。1

爲了瞭解如何爲「H」是能夠返回一個值,你應該read up on how dicts are used,因爲這是m是。

+0

謝謝你的回答,這有助於我更好地理解事情=) – user2063 2012-03-06 08:44:28

2

字典變種可以多一點簡潔的書面:

def heat(number): 
    return {'r':12,'b':24}.get(number,0.0)