我正在使用 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秒
s,但是我修改后大概需要50秒
code> 处理 1000 行数据。
为什么会这样?一个调用不应该比两个调用快吗?
感谢您的建议。
最佳答案
日志不是对短代码部分进行基准测试的好方法 - 您的系统中还发生了很多其他事情。使用 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
关于python - Python 中拆分函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255121/