str.join真的比+快吗?

2020年10月24日 / 18次阅读 / Last Modified 2020年10月24日
字符串

要看使用场景,如果只是少量的几个字符串拼接,用+更快,也更有可读性。大量字符串拼接,用str.join更快。

$ python3 -m timeit -p '"123"+"456"'
50000000 loops, best of 5: 5.96 nsec per loop
$ python3 -m timeit -p '"".join(("123","456"))'
5000000 loops, best of 5: 69.2 nsec per loop

只有两个字符串拼接的时候,join函数慢10倍以上!

我理解+是一个操作,而join是个函数调用,有一些其它的overhead。

>>> import timeit
>>> a = ['123' for i in range(int(1e6))]
>>> len(a)
1000000
>>>
>>> def test1():
...     for it in a:
...         it + '456'
...
>>> def test2():
...     for it in a:
...         ''.join((it,'456'))
...
>>> timeit.timeit(test1, number=100)
4.779130356851965
>>> timeit.timeit(test2, number=100)
9.719397358829156

这也是个join函数更慢的case,因为不断地在调用join函数。

下面是调用jion快的情况:

>>> len(a)
1000000
>>>
>>> def test3():
...     b = ''
...     for it in a:
...         b += it
...     return b
...
>>> def test4():
...     return ''.join(a)
...
>>> timeit.timeit(test3, number=100)
5.043632473098114
>>> timeit.timeit(test4, number=100)
0.5507863389793783

test4这个函数实现了test3相同的功能,不过test4只调用了一次jion函数,一次调用把100万个字符串拼接在一起,而不是拼接100万次,因此效率就提高了。

-- EOF --

本文链接:https://www.pynote.net/archives/2641

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top