python - Python 中拆分函数的奇怪行为

标签 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秒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/

相关文章:

python - 如何使用 python-twitter 搜索 API 获取最新的推文 ID

mysql - 在 mysql 中存储数据的最佳方法?

performance - 列表理解中的性能(处理时间)影响因素是什么?

python - 用 python 嵌套循环三角形

python - 使用 PySimpleGUI、MatPlotLib 和 tkinter 绘制代码在选择函数时崩溃

python - 这是登录某人的正确/安全方式吗?

ios - MapKit 在 iOS 6 中与 Apple map 的滚动性能不佳

java - 组播发送性能

R:逐元素矩阵除法

python - 是否可以创建带有垂直误差条的百分比偏差的 matplotlib 条形图?