繁体   English   中英

我是否应该使用浮点文字将整数表示为Python中的浮点数?

[英]Should I use float literals to represent integer numbers as floats in Python?

考虑一个返回浮点参数一半的函数。 应该是第一还是第二?

def half_a(x: float) -> float:
    return x / 2

def half_b(x: float) -> float:
    return x / 2.0

是否存在任何性能差异,或者是否存在样式约定,这些约定中的一种优于另一种?

显然, half_a看起来更好,并且更复杂的代码片段可以通过这种方式编写,从而更具可读性,但是在某些其他语言中,有必要或最好使用half_b版本以避免运行时类型转换。

很难知道是否存在性能差异(如果存在,则可以忽略不计)。 关于样式,也没有通用约定。 但是,如果您使用的是python 3+,我会选择第一个。 Python 3对于整数除法具有不同的运算符。 见下文

x = 2
print(type(x)) # int
print(type(x / 2)) # float
print(type(x // 2)) # int

另一方面,如果您使用的是python 2,则应该选择第二个,因为如果您的参数碰巧是一个int

print(2/5) # 0

float除以floatfloat除以int快一点:

>>> timeit.timeit('n/2', 'n=123456.789') 
0.04134701284306175
>>> timeit.timeit('n/2.0', 'n=123456.789')
0.03455621766488548
>>> timeit.timeit('[n/2 for n in r]', 'r = [n*5/1.1 for n in range(1, 10001)]', number=10000)
5.177127423787169
>>> timeit.timeit('[n/2.0 for n in r]', 'r = [n*5/1.1 for n in range(1, 10001)]', number=10000)
4.067747102254316

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM