Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
from timeit import timeit
def t1():
# складываем 10 строк через + из переменной
t = 'text'
for _ in range(1000):
s = t + t + t + t + t + t + t + t + t
def t2():
# склеиваем список строк через метод join
arr = ['text'] * 10
for _ in range(1000):
s = ''.join(arr)
def t3():
# складываем через + но не из переменной а непосредственно инлайн объекты
for _ in range(1000):
s = 'text' + 'text' + 'text' + ... # всего 10 раз
Теперь каждую строку склейки запустим по 10М раз
>>> timeit(t1, number=10000)
0.21951690399964718
>>> timeit(t2, number=10000)
1.4978306379998685
>>> timeit(t3, number=10000)
0.2213820789993406
Хм, а нам говорили что через "+" это плохо и медленно ))) 😁
Тут стоит учитывать, что речь идёт о склейке множества длинных строк.
Давайте изменим условия:
def t4():
t = 'text'*100
for _ in range(1000):
s = t + t + t + t + t + t + t + t + t
def t5():
arr = ['text'*100] * 10
for _ in range(1000):
s = ''.join(arr)
def t6():
for _ in range(1000):
s = 'text'*100 + 'text'*100 + ... # всего 10 раз
>>> timeit(t4, number=10000)
12.795130728000004
>>> timeit(t5, number=10000)
2.642637542999182
>>> timeit(t6, number=10000)
0.2184546610005782
Вот, уже другой разговор, сразу видна разница, в среднем в 6 раз. Но погодите, почему последний тест t6() по скорости такой же как и t3()? Ведь строки теперь в 100 раз длиннее!
Это вопросы оптимизации кода, какие простые изменения ускоряют или замедляют выполнение программы. Мы столкнулись с примером обхода обращения к переменной. Например, именно так работает директива #define в С++, во время компиляции подставляя значение переменной вместо ссылки на неё.
В Python это тоже работает, но часто ли вы сможете встретить такой способ работы со строками? К сожалению, способ почти только теоретический.
В целом, тесты показали то, что мы хотели. Делаем выводы самостоятельно.
Полный листинг 🌍
#tricks
📸Распаковка Waizowl Triaina - в наличии!
🔵Два цвета: Белая-Riptide и Черная-Abyss.
🔵Корпус сделан из композитного материала, а именно смеси Поликарбоната и Стекловолокна, максимальная прочность и жесткость корпуса.
🔵Вес 49 грамм, размеры 122x64x36 миллиметров. Симметричная форма с центральным расположением горба подойдет для следующих типов хвата и длины ладони: Когтеовой хват (17.5-20) Ладонный хват (16.5-18), Пальцевый хват (18.5-21).
🔵Внутри установлены новые Оптические переключатели TTC, энкодер TTC Gold, кастомный сенсор PAW3950 HAWKEYE, датчик с экстремальной производительностью и низким энергопотреблением Nordic 54L15.
Цена: 6.990₽ - на ReShip.pro🛍️
САЙТ • МЕНЕДЖЕР • #WAIZOWL
🔱НОВИНКА ОТ WAIZOWL🔱
— Бренд давно не радовал нас новинками и на днях представил свежую модель Waizowl Triaina:
🔵Два цвета: Белая-Riptide и Черная-Abyss.
🔵Корпус сделан из композитного материала, а именно смеси Поликарбоната и Стекловолокна, максимальная прочность и жесткость корпуса.
🔵Вес 49 грамм, размеры 122x64x36 миллиметров. Симметричная форма с центральным расположением горба подойдет для следующих типов хвата и длины ладони: Когтеовой хват (17.5-20) Ладонный хват (16.5-18), Пальцевый хват (18.5-21).
🔵Внутри установлены новые Оптические переключатели TTC, энкодер TTC Gold, кастомный сенсор PWA3950 HAWKEYE, датчик с экстремальной производительностью и низким энергопотреблением Nordic 54L15.
🥇Цена 8.390₽ 7.551₽ — Cкидка 10% на предзаказ до 30-го числа.
САЙТ • МЕНЕДЖЕР • #WAIZOWL
🦔Waizowl OGM Pro V2 Poseidon в наличии! Лимитированная расцветка которая не будет пополняться после солд аута.
🔵Сенсор PAW3950
🔵Переключатели оптические Omron
🔵Супер цепкое покрытие
🔵Донгл 8.000hz в комплекте
🔵Вес 49 грамм
— Эргономичная мышка средних размеров, горб в центре и небольшой наклон клавиш, подойдет для Ладонного и Когтевого хвата.
💵Цена: 8.790₽ на ReShip.pro
САЙТ • МЕНЕДЖЕР • #WAIZOWL
🛍️Новая лимитированная расцветка OGM Pro V2 — Poseidon уже скоро в ReShip!
Оформляй предзаказ прямо сейчас и получи скидку🔤
— Лимитированное издание - количество ограничено!
➖Цена: 8 490 ₽
➖Доступно на ReShip.pro
КАТАЛОГ • МЕНЕДЖЕР • #WAIZOWL
⏰WAIZOWL пополнили коллекцию OGM PRO V2 расцветкой POSEIDON!
☁️Сенсор PAW3950
☁️Переключатели оптические Omron
☁️Супер цепкое покрытие
☁️Донгл 8.000hz в комплекте
☁️Вес 49 грамм
— Уникальная эргономичная форма с детализированным дизайном богини, создана для Когтевого и Ладонного хвата
💳Цена со скидкой на предзаказ 8.490₽ — уже на ReShip.pro
КАТАЛОГ • МЕНЕДЖЕР • #WAIZOWL
🌸Waizowl OGM Pro V2 в расцветках Purple Fade и Blue Fade
🔘Сенсор PAW3950
🔘Переключатели Huano Transparent Green Shell White Dot
🔘Донгл 8к в комплекте
🔘Вес 49 грамм
Эргономичная мышка средних размеров, с высоким горбом по середине и высоким расположением клавиш, подойдет для средней и большой ладони (хват Ладонный/Когтевой)
💳Цена 7.990₽
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #WAIZOWL
🌒Переходи на темную сторону с Waizowl OGM Pro V2 HADES
🟡Сенсор PAW3950
🟡RAESHA Optical Switch
🟡Супер цепкое покрытие
🟡Донгл 8к в комплекте
🟡Вес 49 грамм
🌒Уникальная эргономичная форма с детализированным дизайном богини, не упустите шанс добавить этот шедевр в свою коллекцию всего за 8.790₽!
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #WAIZOWL
👑Мышка Waizowl Cloud XS с потрясающим дизайном, созданная с любовью к совам, уже в продаже!
~ Сенсор Paw3950
~ Оптические переключатели RAESHA
~ 8к донгл в комплекте
~ Вес 45 грамм
✨ Отлично подходит для ладонного и когтевого хвата, обеспечивая полную поддержку ладони и комфортное размещение пальцев по бокам.
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #WAIZOWL