<p>在之前的一篇文章中,我询问了最有效的大规模动态字符串连接方法,并建议使用<strong>join</strong>方法,这是最好、最简单、最快的方法(正如大家所说)。但是当我在玩字符串连接时,我发现了一些奇怪的(?)结果。我肯定发生了什么事,但我不太明白。以下是我所做的:</p>
<p>我定义了这些功能:</p>
<pre><code>import timeit
def x():
s=[]
for i in range(100):
# Other codes here...
s.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>("abcdefg"[i%7])
return ''.join(s)
def y():
s=''
for i in range(100):
# Other codes here...
s+="abcdefg"[i%7]
return s
def z():
s=''
for i in range(100):
# Other codes here...
s=s+"abcdefg"[i%7]
return s
def p():
s=[]
for i in range(100):
# Other codes here...
s+="abcdefg"[i%7]
return ''.join(s)
def q():
s=[]
for i in range(100):
# Other codes here...
s = s + ["abcdefg"[i%7]]
return ''.join(s)
</code></pre>
<p>我尝试在函数中保持其他内容(除了连接)几乎相同。然后我用注释中的结果测试了以下内容(在Windows32位计算机上使用Python3.1.1 IDLE):</p>
<pre><code>timeit.timeit(x) # 31.54912480500002
timeit.timeit(y) # 23.533029429999942
timeit.timeit(z) # 22.116181330000018
timeit.timeit(p) # 37.718607439999914
timeit.timeit(q) # 108.60377576499991
</code></pre>
<p>这意味着<em>strng=strng+dyn_strng</em>是最快的。虽然时间上的差异没有那么大(除了最后一次),但我想知道为什么会发生这种情况。这是因为我使用的是Python3.1.1,而且它提供了最有效的“+”吗?我是否应该使用“+”来替代<em>连接</em>?或者,我做了一些非常愚蠢的事情吗?或者什么?请解释清楚。</p>