Python中split函数的奇怪行为

时间:2012-06-29 01:51:34

标签: python performance

我正在使用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行数据

为什么会这样?一次通话应该比两次通话更快吗?

感谢您的建议。

1 个答案:

答案 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