Скорее всего уже слышали, что складывать строки через + это плохая практика. Падение производительности, и всё такое. Без лишних слов, давайте измерять:
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
arter97 Kernel | Android 14 | Nothing Phone (2)
✍️ Details:
- Version: r15
- Codename: #Pong
- Released: 15/03/24
🔽 Download: Normal & KSU Version
🆘 Support Threads: TG | XDA
🔖Tags : #Stock#Kernel#arter97#U
✨Changelogs:
- Backported lazy RCU to improve power consumption
- Other minor bug fixes and changes from Google
✍️ Note:
- This kernel is only compatible with Stock A14 NOS rom.
- Report issues (if any) in the support group with appropriate logs.
😎 Maintainer : @arter97
🔔 Updates : @NothingPhone2Updates
💬 Chat : @NothingPhone2
NothingMuchROM | Android 14 | Nothing Phone (2)
Nothing OS with some handful modifications for a better experience
✍️ Details:
- Version: r15 (NOS 2.6.0)
- Codename: #Pong
- Released: 08/07/24
🔽 Download : Here
🆘 Support group: TG | XDA
⚙️ Installation: Here
🔖Tags : #Stock#ROM#arter97#U#NothingPhone2
✨Changelogs:
- Stable release based on 2.6.0
- Custom bionic updated to use the latest AOSP compiler and fix several minor issues in the math library.
😎 Developer: @arter97
🔔 Updates: @NothingPhone2Updates
💬 Chat: @NothingPhone2
NothingMuchROM | Android 14 | Nothing Phone (2)
Nothing OS with some handful modifications for a better experience
✍️ Details:
- Version: r14 (NOS 2.5.6)
- Codename: #Pong
- Released: 02/07/24
🔽 Download : Here
🆘 Support group: TG | XDA
⚙️ Installation: Here
🔖Tags : #Stock#ROM#arter97#U#NothingPhone2
✨Changelogs:
- Stable release based on NOS 2.5.6
- Dirac is back, thanks to the fix from gotenksIN
✍️ Note:
- If you don't want dirac, stick to the r13 build based on NOS 2.5.6
😎 Developer: @arter97
🔔 Updates: @NothingPhone2Updates
💬 Chat: @NothingPhone2
NothingMuchROM | Android 16 | Nothing Phone (2)
✍️ Details:
- Version: r40
- Codename: #Pong
- Released: 10/03/26
🔽 Download : Here
🆘 Support group: Here
⚙️ Installation: Here
🌳 Source: Here
🔖Tags : #Stock#ROM#arter97#V#NothingPhone2
✨ Changelogs
- Update base to 4.0 (Pong_B4.0-260226-0955)
🗒 Note:
- Back up your data before proceeding.
- Make absolutely sure that you're flashing the respective firmware alongside the installation. Failure to do so will result in an untested scenario.
- Recovery flashable firmwares can be found here.
- It is recommended to use arter97's latest kernel build with this ROM.
👤 Developer: @arter97
🔔 Updates: @NothingPhone2Updates
💬 Chat: @NothingPhone2
NothingMuchROM | Android 15 | Nothing Phone (2)
✍️ Details:
- Version: r39
- Codename: #Pong
- Released: 20/09/25
🔽 Download : Here
🆘 Support group: Here
⚙️ Installation: Here
🔖Tags : #Stock#ROM#arter97#V#NothingPhone2
✨ Changelogs
- Update base to Pong-V3.2-250917-1451
🗒 Note:
- Back up your data before proceeding.
- Make absolutely sure that you're flashing the respective firmware alongside the installation. Failure to do so will result in an untested scenario.
- Recovery flashable firmwares can be found here.
- It is recommended to use arter97's latest kernel build with this ROM.
👤 Developer: @arter97
🔔 Updates: @NothingPhone2Updates
💬 Chat: @NothingPhone2
NothingMuchROM | Android 15 | Nothing Phone (2)
✍️ Details:
- Version: r37
- Codename: #Pong
- Released:15/07/25
🔽 Download : Here
🆘 Support group: Here
⚙️ Installation: Here
✨ Changelogs: Here
🔖Tags : #Stock#ROM#arter97#V#NothingPhone2
🗒 Note:
- Back up your data before proceeding.
- Make absolutely sure that you're flashing the respective firmware alongside the installation. Failure to do so will result in an untested scenario.
- Recovery flashable firmwares can be found here.
- Stable release based on 3.2 (Pong_V3.2-250708-2227_3.2)
- It is recommended to use arter97's latest kernel with this ROM.
👤 Developer: @arter97
🔔 Updates: @NothingPhone2Updates
💬 Chat: @NothingPhone2
NothingMuchROM | Android 15 | Nothing Phone (2)
✍️ Details:
- Version: r36
- Codename: #Pong
- Released: 23/05/25
🔽 Download : Here
🆘 Support group: Here
⚙️ Installation: Here
✨ Changelogs: Here
🔖Tags : #Stock#ROM#arter97#V#NothingPhone2
🗒 Note:
- Back up your data before proceeding.
- Make absolutely sure that you're flashing the respective firmware alongside the installation. Failure to do so will result in an untested scenario.
- Recovery flahsable firmwares can be found here.
- Flashing super is enough for users coming from r35.
- Stable release based on NOS 3.0, Build: Pong-V3.0-250506-1805.
- It is recommended to use arter97's latest kernel with this ROM.
👤 Developer: @arter97
🔔 Updates: @NothingPhone2Updates
💬 Chat: @NothingPhone2