Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
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
🇬🇧英国Sendwave 汇款工具
在线阅读
Sendwave 是一家成立于2014年的国际汇款公司,总部位于英国,专注于提供快速、低成本的英镑GBP跨境转账服务。它主要服务于北美和欧洲的用户,允许他们将资金汇款至非洲和亚洲的多个国家。
优势:
• 即时到账:大多数情况下,资金能在几秒钟内到账,极大提高了转账效率。
• 24/7客户支持:提供全天候客户服务,确保用户在任何时候都能获得帮助。
• 广泛覆盖:支持多种国家和货币,包括非洲(如肯尼亚、尼日利亚、加纳等)、亚洲(如孟加拉国、菲律宾等)以及美洲(如海地、多米尼加共和国等)。
• 多样化收款方式:收款人可以选择通过银行存款、现金提取或手机充值等多种方式接收资金。
填写邀请码“ZRQFM”,在你第一次汇款时可以获得10英镑减免的奖励。
Online reading link
Introduction:
Sendwave is an international remittance company founded in 2014, headquartered in the UK, that focuses on providing fast and low-cost with GBP cross-border transfer services. It primarily serves users in North
America and Europe, allowing them to send money to several countries in Africa and Asia.
Advantage:
• Instant Transfers: In most cases, funds can arrive within seconds, greatly enhancing transfer efficiency.
• 24/7Customer Support: Provides round-the-clock customer service to ensure users can get help at any time.
• Wide Coverage: Supports various countries and currencies, including African nations (such as Kenya, Nigeria, Ghana), Asian countries (like Bangladesh, the Philippines), and American regions (like Haiti, the Dominican Republic).
• Diverse Receiving Options: Recipients can choose to receive funds through bank deposits, cash pickups, or mobile top-ups.
Fill in the invitation code "ZRQFM" in Enter promo code, and you can get a reward of 10 pounds off when you make your first remittance.
#UK#Sendwave#汇款