首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:为什么分区(Sep)比拆分快(sep,maxsplit=1)

Python:为什么分区(Sep)比拆分快(sep,maxsplit=1)
EN

Stack Overflow用户
提问于 2017-12-20 11:50:51
回答 1查看 1.2K关注 0票数 4

我发现一个有趣的事情,当在分隔符后面获取整个子串时,partitionsplit更快。我已经在Python 3.5和3.6 (Cpython)中测试过了

代码语言:javascript
复制
In [1]: s = 'validate_field_name'

In [2]: s.partition('_')[-1]
Out[2]: 'field_name'

In [3]: s.split('_', maxsplit=1)[-1]
Out[3]: 'field_name'

In [4]: %timeit s.partition('_')[-1]
220 ns ± 1.12 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [5]: %timeit s.split('_', maxsplit=1)[-1]
745 ns ± 48.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [6]: %timeit s[s.find('_')+1:]
340 ns ± 1.44 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

我翻阅了Cpython的源代码,找到了使用FASTSEARCH算法的partition,见here。并且split仅在分隔符字符串的长度大于1时才使用FASTSEARCH,请参见here。但是我已经在sep字符串上测试过了,它的长度更长。我得到了同样的结果。

我猜是因为partition返回了一个三元素元组,而不是一个列表。

我想知道更多细节。

EN

回答 1

Stack Overflow用户

发布于 2017-12-20 18:00:56

微基准测试可能会产生误导

代码语言:javascript
复制
py -m timeit "'validate_field_name'.split('_', maxsplit=1)[-1]"
1000000 loops, best of 3: 0.568 usec per loop

py -m timeit "'validate_field_name'.split('_', 1)[-1]"
1000000 loops, best of 3: 0.317 usec per loop

只需将参数作为位置或关键字传递即可显著更改时间。所以我会猜测分区更快的另一个原因,因为它不需要第二个参数…

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47898526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档