Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
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
Последний кусочек отпускного счастья — перелёт Бангкок – болото, облачные облака и горы.
До сих пор не знаю, зачем "спустила" столько кадров на крылья, если мне за них не платит авиакомпания, но допустим окэй.
В комменты сложу файлы, можно будет забрать для заставки на телефон, а то чего-то давно так не делала.
#35мм
Черепахи, фантастический пляж, на который мы не выходили, потому что прятались в тени местных сосен, зелень перед грозой и машинка после рыболовного магазина. На этом тайская серия всё, нууу, почти 💔
#35мм
С перерывами продолжаю показывать отпуск на плёнку — ладно, есть ещё порох в пороховницах.
Посмотрите на эту нежность, цвет, облака и воду.
Четвёртый кадр кажется через чур чёрным, но это просто нужно вправо смотреть — там не столько облака, там горки!
#35мм
Продолжим вести протокол: фотографировать с лодки на скорости я тоже разучилась. Это островная часть, где на рыб мы только смотрели. Со дна Алексей Сергеич достал мне зелёно-коричневую каури размером с абрикос, а себе местную блесёнку.
#35мм
Вчерашний день был отдан детячьим книжкам в Голосине, поэтому плёночный пост постится сегодня.
Кажется, я разучилась настраивать камеру, солнце выжгло мне мозг. Первая тайская серия, рыболовно-морская, солёная.
Карена с Fujifilm. Поставщик, как всегда, Денис.
#35мм
Недавно отдала Полине и Анотону распечатанные фото, нужно и вам что ли показать эту сборную солянку на #35мм💘
Раз в миллион лет я продолжаю снимать свадьбы и портреты. Чтобы жизнь малиной не казалась, я решила в этот раз вооружиться полностью механической Кареной с механическим Гелиосом, подстраховочной новой Минолтой на автомате (купила новую и сразу устроила стресс-тест машине) и механическим же Киевом-60.
Формат свадьбы был не мой любимый — выкуп, посиделки дома, ЗАГС, роспись, фуршетец в парке — но зато невеста вместо референсов и "хочу вот так" дала полную свободу действий. Ну я и развлекалась в меру своих скромных возможностей, снимая на три камеры и подснимая это всё ещё и на телефон.
Подруга невесты принесла на свадьбу новенький Полароид, и все гости были обеспечены моментальным фото на память. Приходите в комменты, я их покажу. А фотки с Киева покажу в другой раз.
Копалась в папках на компе и нашла неопубликованные книжнофестивальные #35мм👀
Встречайте!
Казань, фестиваль Смены. И нежная чудесная Рената, волонтёр, не раз выручивший меня и Женю (кстати, это Женя меня сфоткала на фоне e=mc²).
Уфа, любимая лягушка Ксюша, вид снизу, потому что я растеклась лужей на адской жаре.
Перелёт Екатеринбург – Петербург и призрак Петра Волцита на фоне музейного домика в Верхней Туре.
В комментариях покажу другие 35мм: меня на зимнем нонфике снимала Ксюша, наши с Ксюшей тени у Двадцать восьмого, кадр сделала Рената в Казани, и ещё Рома из тюменских Измерений мыльницу в Тобольск брал.
Последние плёночные кадры с Кольского #35мм
Тут у нас облако, облизывающее холм.
Речка, впадающая в залив, и рыбак (левый мужик какой-то, но стоял так хорошо).
Лодочка с кранцами из старых покрышек.
И два брата-близнеца: неразличимы на первый взгляд и совсем разные на все последующие. Так и не определилась, какая история нравится мне больше: уравновешивающие рыбаки возвращаются домой или рыбаки-точки за сарайчиком ждут погоды и рыбы.
Какой кадр из двух вам больше нравится и почему?
Первая серия #35мм с Кольского. Взяла свою старушку, от и до механическую камеру Carena, прицепила на неё Юпитер-21М и пошлёпала сплющивать пространство.
Зелень и горковость. Контрастная чернота, автомобильная точка. Лэпины! Снова зелень, горковость, лужица. Разлив воды, дома, ветряки. Гористость, покрытая лесом (мозг упорно говорит, что это мангровые заросли). Снова машинка на дороге! Знаки. Кандалакшинская губа с высоты, город с той же точки.
Мне.
Очень.
Зелено!
Лель, Афина, Вета, Квартет, Бемби.
Сегодня закрыла сезон жидкой воды. В этом году на Фарте больше не выйдем — разоружились, положили мачту, отнесли её в гараж и зачехлили. Впереди уборочные работы, подъём, зачехление корпуса и почти полгода дурной твёрдой воды.
В комментах покажу сегодняшние фото, а эти #35мм с каких-то летних выходных.