我正在使用Python处理大量:
分割数据。我的情况很奇怪。
这是我的同事写的原始代码:
tag = word[i].split(":")[0].decode('utf8')
value = int(word[i].split(":")[1])
我认为这是低效的,因为它将split
函数调用两次,其中一次调用就足够了,所以我将其更改为:
tokens = word[i].split(":")
tag = tokens[0].decode('utf8')
value = int(tokens[1])
在此之后发生了非常奇怪的事情:
我使用日志来记录代码的性能,处理1000行数据需要大约10 second
秒,但在我修改之后需要大约50 seconds
来处理1000行数据
为什么会这样?一次通话应该比两次通话更快吗?
感谢您的建议。
答案 0 :(得分:4)
日志不是对短代码部分进行基准测试的好方法 - 您的系统中还会发生很多其他事情。使用timeit模块可以得到更准确的结果:
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import timeit
>>> word = ["answer:42"]
>>> def split1(word=word):
... tag = word[0].split(":")[0].decode("utf-8")
... value = int(word[0].split(":")[1])
...
>>> def split2(word=word):
... tokens = word[0].split(":")
... tag = tokens[0].decode("utf-8")
... value = int(tokens[1])
...
>>> t2 = timeit.Timer("split2()", "from __main__ import split2")
>>> t2.timeit()
2.5862038135528564
>>> t1 = timeit.Timer("split1()", "from __main__ import split1")
>>> t1.timeit()
2.8647868633270264