Dav*_*lfe 1 python python-2.7 python-3.x
我已经看到很多帖子(这里和这里的例子)谈到Python中的连接,如何最好地做('+'vs','),这更快,等等.但我似乎无法找到出为什么它很重要.Roger Pate在第一个例子中提到了关于传递多个参数与一个参数,但我仍然不清楚.
那么,为什么连接很重要?什么是用例,这是至关重要的?
因为在一般+ING n字符串将导致n-1的分配O(n)内存的结果.通过邻接连接在解析器中完成,并执行1次分配.例如,串联''.join(iter(s))将执行总存储器的O(log(n))分配/复制2n.
> a = ['a'] * 100000
> def concat(strings):
c = ''
for s in strings:
c += s
return c
> %timeit ''.join(a) # precalculates necessary buffer size
1000 loops, best of 3: 1.07 ms per loop
> %timeit ''.join(iter(a)) # allocates exponentially larger buffers
1000 loops, best of 3: 1.94 ms per loop
> %timeit concat(a) # allocates a new buffer n-1 times
100 loops, best of 3: 7.15 ms per loop
Run Code Online (Sandbox Code Playgroud)