Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
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
🇺🇸 Un homme âgé de 69 ans a tué par balle ses partenaires d’affaires au Texas, selon ABC.
Le tireur a ouvert le feu lors d’une réunion dans un centre commercial de la ville de Carrollton, faisant un mort et trois blessés. Plus tard, l’homme a abattu une autre personne dans son appartement.
#étatsunis#fusillade#victimes
🇺🇸 Au moins douze personnes ont été blessées dans une fusillade dimanche près du lac Arcadia dans l'Oklahoma, aux États-Unis, a rapporté la chaîne CBS News.
La chaîne KWTV-DT a indiqué plus tôt que la police avait trouvé quatre personnes présentant des blessures par balle à l’intérieur d’un véhicule.
#étatsunis#fusillade#victimes
🇺🇸 Des images de la fusillade à Virginia Beach.
Les faits se sont produits dans une rue après une altercation verbale entre deux groupes de jeunes. Au moins huit personnes ont été blessées, rapporte la chaîne ABC.
#étatsunis#fusillade#victimes
🇺🇸 Au moins douze personnes ont été blessées dans une fusillade dimanche près du lac Arcadia dans l'Oklahoma, aux États-Unis, a rapporté la chaîne CBS News.
Neuf blessés ont été transportés dans un centre médical de la capitale de l’État et trois autres vers un hôpital d’Edmond, ont précisé des responsables médicaux à la chaîne.
La chaîne KWTV-DT a indiqué plus tôt que la police avait trouvé quatre personnes présentant des blessures par balle à l’intérieur d’un véhicule.
Vidéo: Luke Brenner/X
#étatsunis#fusillade#victimes
🇹🇷 Une fusillade est survenue dans une école dans le sud-est de la Turquie, le tireur a été neutralisé, a rapporté la chaîne de télévision NTV. Quatre personnes ont été tuées, selon les autorités.
#turquie#fusillade#victimes
🇹🇷 Seize personnes ont été blessées lors d'une fusillade dans un établissement scolaire en Turquie, rapporte la chaîne de télévision TGRT.
L'assaillant a ouvert le feu de manière aléatoire dans la cour intérieure. Il a ensuite fait irruption dans le bâtiment, où il a continué à tirer. Certains élèves ont quitté l’établissement en sautant par les fenêtres.
L'assaillant, né en 2007, est décédé au cours de l'opération de police, a annoncé le gouverneur de la province de Sanliurfa, Hasan Sildak.
#turquie#fusillade#victimes
🇺🇦 La police nationale ukrainienne va mener une enquête administrative après que deux policiers ont fui les lieux d'une fusillade à Kiev, laissant des civils sans protection, a déclaré le ministre de l'Intérieur du pays, Igor Klimenko.
J'ai chargé le chef de la police nationale ukrainienne, Ivan Vygovski, de mener une enquête administrative sur les actions des policiers lors de l'attentat terroriste à Kiev et de fournir toutes les informations au Bureau d'enquête d'État,
a écrit M. Klimenko sur sa chaîne Telegram.
#ukraine#police#fusillade
🇧🇷 Un adolescent de treize ans a ouvert le feu dans une école située dans le nord-ouest du Brésil. Deux employés sont morts, plusieurs élèves ont été blessés, selon le site G1.
#brésil#fusillade#victimes
🇲🇽 Le nombre de blessés lors de la fusillade survenue sur le site archéologique de Teotihuacan, au Mexique, est passé à 13 personnes, a fait savoir le cabinet de sécurité mexicain.
#mexique#fusillade#victimes
🇷🇺Un étudiant a ouvert le feu dans le hall d'un établissement scolaire à Anapa. Il a été interpellé. Le bilan fait état d'un mort et de deux blessés, selon la chaîne Telegram de la Direction principale du ministère de l'Intérieur pour le territoire de Krasnodar.
D'après les premiers éléments, un étudiant de cet établissement a ouvert le feu aujourd'hui dans le hall d'un institut professionnel d'Anapa avec une arme non identifiée. Une personne est morte, deux personnes ont été blessées et reçoivent des soins. L'auteur présumé a été interpellé,
indique le communiqué.
#russie#fusillade#anapa
🇹🇭Un jeune homme a ouvert le feu dans une école dans le sud de la Thaïlande et a blessé plusieurs personnes, a rapporté le journal Khaosod.
Selon l’édition, le drame s'est produit dans la ville de Hat Yai, dans la province de Songkhla. La fusillade a fait des blessés, mais le nombre exact de victimes n'est pas connu. Selon les informations préliminaires, le suspect s'est introduit dans l'école peu avant la fin des cours et a pris en otage plus de 300 élèves et enseignants. Il est signalé que le tireur a 18 ans. Il a été interpellé.
#thaïlande#fusillade#bilan
🇺🇸 Un inconnu a ouvert le feu dans un centre commercial de l'État américain de Louisiane, rapporte Newsweek. Tout le monde a été évacué et aucun blessé n'est à déplorer.
#étatsunis#fusillade#louisiane