2015-07-08 4 views
3

Я проходил через вступление в python google и натолкнулся на утверждение, что s * 3 работает быстрее, чем s + s + s, где s имеет тип string.В python, почему s * 3 быстрее, чем s + s + s?

Любые причины для этого?

Я нашел googled и нашел which is faster s+='a' or s=s+'a' in python. Но это не помогло

+0

Хорошо, я бы сказал, что первая - это отдельная операция, в то время как последняя состоит из двух отдельных операций, а вторая будет делать то, что уже сделал первый (например, проверить строку) – Pynchia

ответ

17

Потому что s * 3 - одна операция, тогда как s + s + s - две операции; это действительно (s + s) + s, создавая дополнительный объект строки, который затем отбрасывается.

Вы можете увидеть разницу с помощью dis посмотреть на байткод каждый генерирует:

s + s + s:

3   0 LOAD_FAST    0 (s) 
       3 LOAD_FAST    0 (s) 
       6 BINARY_ADD   
       7 LOAD_FAST    0 (s) 
      10 BINARY_ADD   
      11 RETURN_VALUE  

s * 3:

3   0 LOAD_FAST    0 (s) 
       3 LOAD_CONST    1 (3) 
       6 BINARY_MULTIPLY  
       7 RETURN_VALUE  
3

Вы также можете проверить сами здесь:

import timeit 

print(timeit.timeit("string=''; string='s'+'s'+'s'", number=10000)) 
print(timeit.timeit("string2=''; string2='s'*3", number=10000)) 

Я предполагаю, что s*3 рассматривает его как одну операцию против двух с s+s+s.

+1

В чем смысл 'string' и' string2' в ваших примерах? – jonrsharpe

Смежные вопросы