Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
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
Papa #LeoneXIV riceverà in udienza, giovedì 9 aprile, alle ore 11.30, nella Sala Clementina del Palazzo Apostolico, in Vaticano, alcuni sportivi italiani, rappresentanti di tutti coloro che hanno partecipato alle #Olimpiadi e alle #Paralimpiadi invernali di #MilanoCortina, per mettere in risalto i successi degli atleti, la cui passione e le cui capacità hanno arricchito così tanto le nostre vite.
Proprio nel giorno di apertura dei Giochi, il 6 febbraio scorso, il Santo Padre ha firmato la Lettera “La vita in abbondanza” sul valore dello sport. A coordinare l’iniziativa dell’Udienza è il Dicastero per la Cultura e l’Educazione, con il coinvolgimento di Athletica Vaticana, in collaborazione con il Comitato Nazionale Olimpico Italiano (Coni) e il Comitato Italiano Paralimpico (Cip) Significativamente, durante l’Udienza sarà presente in sala la “Croce degli Sportivi” che, per tutta la durata dei Giochi, è stata collocata nella basilica di San Babila a Milano.
Alcuni atleti si recheranno poi al Dispensario Pediatrico “Santa Marta”, sempre in Vaticano, per incontrare alcune famiglie in situazioni di povertà e fragilità.
Nel giorno in cui #Milano accoglie la Croce Olimpica degli Sportivi in vista dei Giochi di #MilanoCortina, Papa #LeoneXIV auspica che "queste giornate di sana competizione contribuiscano a costruire ponti tra culture e popoli, promuovendo l’accoglienza, la solidarietà e la pace”.
Le parole del Pontefice arrivano nel capoluogo lombardo tramite un telegramma, a firma del Cardinale Segretario di Stato, Pietro Parolin, inviato a mons. Mario Delpini, Arcivescovo di Milano, che questa sera presiede Messa a San Babila, chiesa dove sarà custodita la Croce Olimpica per tutta la durata dei Giochi Olimpici e Paralimpici.
Il Santo Padre, salutando "quanti prendono parte alla celebrazione” “auspica" altresì che le #Olimpiadi suscitino "sentimenti di amicizia e di fraternità, rinsaldando la consapevolezza del valore dello sport al servizio dello sviluppo integrale della persona umana”.
“Siano giorni di festa! Sia festa per l’incontro di pace tra i popoli, sia festa per la bellezza delle gare e dei risultati, sia festa perché le Olimpiadi e le #Paralimpiadi non escludono nessuno”, le parole di mons. Delpini durante l'omelia.
“Siano giorni di profezia - prosegue l'Arcivescovo -, profezia della vocazione alla fraternità universale, profezia per la testimonianza di onestà in ogni cosa, profezia perché le Olimpiadi e le Paralimpiadi piantano nella vicenda umana eccellenza, amicizia, rispetto”.
Il presule chiede inoltre che siano “giorni di condivisione, perché la festa non dimentica le tragedie, perché le risorse non siano per i ricchi, ma per tutti, perché le Olimpiadi e le Paralimpiadi alimentano la cultura della pace”.
Dall'Arcivescovo anche il richiamo all'ascolto del corpo: "Il tuo corpo parla a chi ti incontra. Non ridurre il corpo a una macchina da sfruttare, non ridurre il corpo a un meccanismo complicato che ogni tanto deve essere aggiustato, non ridurre il corpo tuo e altrui a un oggetto da desiderare, non ridurre il corpo a una prigione di cui liberarsi, a un’apparenza di cui vergognarsi”.
“In queste settimane i Giochi saranno una specie di festival del corpo”, prosegue il presule, sottolineando che gli atleti “potranno istruire la città e tutti coloro che sanno ascoltare”. Lo #sport, per mons. Delpini, è “una scuola di ascesi, di morale, di umanità, di vita, di audacia e di fantasia”. Riferendosi alla croce degli sportivi, l’arcivescovo spiega: “Il corpo di Cristo, crocifisso per amore, è l’apertura per andare oltre e accogliere il mistero. Se volete sapere che cos’è l’amore, guardate a Gesù, adorate il corpo crocifisso e risorto”.
📸 Arcidiocesi di Milano