Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
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
"Come possiamo garantire che lo sviluppo dell'intelligenza artificiale #IA serva davvero al bene comune e non venga utilizzato solo per accumulare ricchezza e potere nelle mani di pochi? Questa è una domanda urgente, perché questa #tecnologia sta già avendo un impatto reale sulla vita di milioni di persone, ogni giorno e in ogni parte del mondo". A ribadirlo è Papa #LeoneXIV che questa mattina, nella Sala del Concistoro, in Vaticano, ha incontrato i Partecipanti alla Conferenza "Artificial Intelligence and Care of Our Common Home".
Il Pontefice ricordando la Dottrina Sociale della Chiesa, riflette ulteriormente affermando: "Affrontare questa sfida richiede di porsi una domanda ancora più fondamentale: cosa significa essere umani in questo momento storico? Gli esseri umani sono chiamati a essere collaboratori dell'opera della creazione, non semplici consumatori passivi di contenuti generati dalla tecnologia artificiale".
"La nostra dignità risiede nella capacità di riflettere, scegliere liberamente, amare incondizionatamente ed entrare in relazioni autentiche con gli altri. L'intelligenza artificiale ha certamente aperto nuovi orizzonti alla creatività, ma solleva anche serie preoccupazioni circa le sue possibili ripercussioni sull'apertura dell'umanità alla verità e alla bellezza, e sulla sua capacità di meraviglia e contemplazione. Riconoscere e salvaguardare ciò che caratterizza la persona umana e garantisce la sua crescita equilibrata è essenziale per stabilire un quadro adeguato per gestire le conseguenze dell'intelligenza artificiale", il monito del Santo Padre.
Infine, un pensiero rivolto alle nuove generazioni: "Per costruire insieme ai nostri #giovani un futuro che realizzi il bene comune e sfrutti le potenzialità dell'intelligenza artificiale, è necessario ripristinare e rafforzare la loro fiducia nella capacità umana di guidare lo sviluppo di queste tecnologie. Una fiducia che oggi è sempre più erosa dall'idea paralizzante che il suo sviluppo segua un percorso inevitabile. Ciò richiede un'azione coordinata e concertata che coinvolga #politica, istituzioni, imprese, #finanza, istruzione, comunicazione, cittadini e comunità religiose. Gli attori di questi ambiti sono chiamati a impegnarsi in un impegno comune, assumendosi questa responsabilità comune. Questo impegno viene prima di qualsiasi interesse di parte o profitto, sempre più concentrato nelle mani di pochi. Solo attraverso una partecipazione diffusa che dia a tutti la possibilità di essere ascoltati con rispetto, anche ai più umili, sarà possibile raggiungere questi ambiziosi obiettivi".