以下是什么是Pythonic解决方案?
我正在读一个分辨率为.5的温度传感器。我需要写入它(它有一个可编程的恒温器输出),也是.5分辨率。
所以我编写了这个函数(Python 2.7)来舍入一个浮点作为输入到最近的.5:
def point5res(number):
decimals = number - int(number)
roundnum = round(number, 0)
return roundnum + .5 if .25 <= decimals < .75 else roundnum
print point5res (6.123)
print point5res(6.25)
print point5res(6.8)
哪个工作正常,分别输出6.0,6.5和7.0。这就是我想要的。
我对Python比较陌生。这条线
return roundnum + .5 if .25 <= decimals < .75 else roundnum
让我对它的实施者表示钦佩。但它是Pythonic吗?
编辑:自发布以来,我学到了更多关于what is and isn't 'Pythonic'的知识。我的代码不是。 Cmd的下面是。谢谢!
答案 0 :(得分:7)
如果你保持表达式简单,它们就被认为是pythonic,否则就会变得难以阅读。
我会像这样四舍五入到最接近的0.5:
round(number*2) / 2.0
或更一般地说:
def roundres(num, res):
return round(num / res) * res
答案 1 :(得分:0)
return 0.5 * divmod (number, 0.5) [0] if number >= 0 else -0.5 divmod (number, -0.5) [0]
这看起来更好:
def roundToHalf (number):
''' Round to nearest half '''
half = 0.5 if number >= 0 else -0.5
return half * divmod (number, half) [0]