在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__
,我认为这样可以使脚本看起来更干净。还有其他核心原因吗?
答案 0 :(得分:5)
没有float.round()
方法,没有。您将使用round()
function代替,传递您的值和要舍入的地点数。
round()
是一个函数,因为舍入是一个适用于所有数字类型的操作,而不仅仅是浮点数。就像len()
适用于所有序列(不只是list
或tuple
或str
),以及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()
调用在那里仍然是多余的。