我想理解为什么第一个例子比第二个例子长两倍。我的直觉说,将整数字符转换为int
应该至少与将它们转换为float
一样快,如果不是更快的话。
>>> from timeit import timeit
>>> timeit("float(sum(map(int,['5', '8', '3', '6', '3', '9', '5', '0', '1', '0'])))")
6.165183067321777
>>> timeit("sum(map(float, ['5', '8', '3', '6', '3', '9', '5', '0', '1', '0']))")
2.928786039352417
修改:Why is float() faster than int()?
的副本即使第一个示例中存在额外的float
调用也不是原因,因为我也为它运行了timeit,与这些操作相比需要1%的时间(对于相同的数字)
>>> from timeit import timeit
>>> timeit("float(sum(map(int,['5', '8', '3', '6', '3', '9', '5', '0', '1', '0']
)))", number=100000)
0.6287150382995605
>>> timeit("sum(map(float, ['5', '8', '3', '6', '3', '9', '5', '0', '1', '0']))"
,number=100000)
0.2976219654083252
>>> timeit("float(1)",number=100000)
0.02610301971435547
我试过了dis
,但没有任何帮助我:
def a(li):
return float(sum(map(int,li)))
def b(li):
return sum(map(float, li))
# >>> dis(a)
# 4 0 LOAD_GLOBAL 0 (float)
# 3 LOAD_GLOBAL 1 (sum)
# 6 LOAD_GLOBAL 2 (map)
# 9 LOAD_GLOBAL 3 (int)
# 12 LOAD_FAST 0 (li)
# 15 CALL_FUNCTION 2
# 18 CALL_FUNCTION 1
# 21 CALL_FUNCTION 1
# 24 RETURN_VALUE
# >>> dis(b)
# 4 0 LOAD_GLOBAL 0 (sum)
# 3 LOAD_GLOBAL 1 (map)
# 6 LOAD_GLOBAL 2 (float)
# 9 LOAD_FAST 0 (li)
# 12 CALL_FUNCTION 2
# 15 CALL_FUNCTION 1
# 18 RETURN_VALUE
我正在使用python 2.7.12进行此测试