在python中使用`round`与`__round__`有什么不同?

时间:2017-02-07 18:43:28

标签: python function python-3.x lambda rounding

在python 3中,这可以工作:

Celsius = [39.2, 45.2, 37.3, 37.8, 89]
Fahrenheit = map(lambda x: ((float(9/5))*x + 32).__round__(3), Celsius)

print(list(Fahrenheit))

[102.56, 113.36, 99.14, 100.04, 192.2]

但是,这不起作用,为什么?:

Fahrenheit = map(lambda x: ((float(9/5))*x + 32).round(3), Celsius)

此外,现在很多python脚本都不使用这种旧格式__round__,我认为这样可以使脚本看起来更干净。还有其他核心原因吗?

1 个答案:

答案 0 :(得分:5)

没有float.round()方法,没有。您将使用round() function代替,传递您的值和要舍入的地点数。

round()是一个函数,因为舍入是一个适用于所有数字类型的操作,而不仅仅是浮点数。就像len()适用于所有序列(不只是listtuplestr),以及str适用于所有Python对象。

与所有__*__ dunder方法一样,__round__ is a hook用于自定义类,以覆盖该类的舍入方式。 round()函数在生成输出时使用它,其他功能也是如此。

这有效:

Fahrenheit = map(lambda x: round((9.0/5) * x + 32, 3), Celsius)

请注意,我这里没有使用float(9/5)!在Python二中,那就是1.0:

>>> float(9/5)
1.0

因为9/5使用整数除法首先计算 9.0/5使用浮点除法(因为至少有一个操作数是浮点值),因此给出正确的商:

>>> 9.0/5
1.8

你在这里使用Python 3,其中/表示真正的除法(甚至为整数操作数产生浮点数),但float()调用在那里仍然是多余的。