性能:为什么(整数字符的map int之和的浮点数)慢两倍(整数字符的map float的总和)?

时间:2016-08-17 15:20:27

标签: python performance python-2.7

我想理解为什么第一个例子比第二个例子长两倍。我的直觉说,将整数字符转换为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进行此测试

0 个答案:

没有答案