Я спросил самый эффективный метод массовой динамической конкатенации строк в предыдущем посте, и мне предложили использовать метод 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 на 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 и это обеспечивает '+' как наиболее эффективный? Должен ли я использовать '+' в качестве альтернативы join ? Или я сделал что-то очень глупое? Или что? Пожалуйста, объясните ясно.