1

:我正在使用 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 seconds,但我修改后大约50 seconds需要处理1000行数据。

为什么会发生这种情况?一个电话不应该比两个电话更快吗?

谢谢你的建议。

4

1 回答 1

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
于 2012-06-29T08:26:59.170 回答