提高功能的可读性和功能

时间:2012-03-02 09:50:09

标签: python function dictionary maps definition

我有以下定义:

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等。提前谢谢。

更新

好的,我得到了上面的例子,但是如果我有两个函数输入怎么办?

e.g。

def heat( temp, coeff )

我是否写回报:

return m(heat, coeff) 

或者这不起作用吗?

3 个答案:

答案 0 :(得分:2)

字典变体可以更简洁地写出来:

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

答案 1 :(得分:1)

地图 词典

一般来说,地图词典是两个词,意思相同。它们在许多文献和许多人中互换使用。

调用

maps ,因为这就是他们所做的。它们是映射到彼此的任意值对的集合。给定该对中的一个值(一个称为),另一个()可以相对有效地获得。除了易于使用之外, maps 通常用于此效率目的。 (在您的示例中,“r”和“b”都是,12和24是它们各自的。)

严格地说,在Python中实现此功能的标准数据结构称为dict词典的缩写),他们在文档中用来描述概念的词是< em>映射对象。1

为了了解您如何返回“h”的值,您应该read up on how dicts are used,因为m就是这样。

答案 2 :(得分: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