gpt4 book ai didi

Python:为什么 partition(sep) 比 split(sep, maxsplit=1) 快

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:18 24 4
gpt4 key购买 nike

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

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 源代码,发现 partition 使用了 FASTSEARCH 算法,参见 here .并且 split 仅在分隔符字符串的长度大于 1 时使用 FASTSEARCH,参见 here .但是我已经在长度较大的 sep 字符串上进行了测试。我得到了相同的结果。

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

我想了解更多详情。

最佳答案

微基准可能会产生误导

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

仅将参数作为位置或关键字传递会显着改变时间。所以我猜另一个分区更快的原因是,因为它不需要第二个参数......

关于Python:为什么 partition(sep) 比 split(sep, maxsplit=1) 快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47898526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com