Я спросил наиболее эффективный метод для массовой динамической конкатенации строк в более раннем сообщении, и мне предложили использовать метод join, лучший, самый простой и быстрый способ сделать это (поскольку все сказали, что). Но пока я играл со строковыми конкатенациями, я нашел некоторые странные (?) Результаты. Я уверен, что что-то происходит, но я не могу понять. Вот что я сделал:
Я определил эти функции:
import timeit
def x():
s=[]
for i in range(100):
# Other codes here...
s.append("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)
Я пытался сохранить другие вещи (кроме конкатенации) почти одинаково во всех функциях. Затем я протестировал со следующими результатами с комментариями (используя Python 3.1.1 IDLE на 32-битной машине Windows):
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
Это означает, что он показывает, что strng = strng + dyn_strng является самым быстрым. Хотя разница во времени не такая значительная (кроме последней), но я хочу знать, почему это происходит. Это потому, что я использую Python 3.1.1 и который обеспечивает "+" как наиболее эффективный? Должен ли я использовать "+" в качестве альтернативы для присоединения? Или я сделал что-то очень глупое? Или что? Пожалуйста, объясните четко.