Performance — kodni tezlashtirish
Kod to’g’ri ishlashi — birinchi talab. Ikkinchisi esa maqbul tezlikda ishlashi. Ma’lumot hajmi oshgani sari sekin yozilgan kod chidab bo’lmas holga keladi. Bu darsda sekinlikning sabablarini va uni o’lchash yo’lini ko’ramiz.
Avval o’lchang, keyin tuzating
Tezlashtirishdagi asosiy qoida shu. Dasturchilar odatda kodning qaysi qismi sekin ekanini taxmin qiladi va deyarli har doim adashadi. Taxmin o’rniga o’lchash kerak.
Vaqtni time moduli bilan o’lchash mumkin:
Asosiy sabab — algoritm, til emas
Boshlovchilar sekinlikni ko’pincha “Python sekin til” deb izohlaydi. Aslida katta farqni algoritm yaratadi. Quyidagi misolda bir xil vazifa ikki xil usulda bajariladi:
Ikkala usul ham bir xil javob beradi, lekin to’plam ancha tez. Sabab: ro’yxatda qidirish elementlarni birma-bir tekshiradi, to’plamda esa qiymat to’g’ridan- to’g’ri topiladi.
Tur tanlash tezlikka ta’sir qiladi
Har bir tur o’z vazifasiga moslashtirilgan:
| Amal | Ro’yxat | To’plam / Lug’at |
|---|---|---|
x in ... qidirish |
sekin | tez |
| Oxiriga qo’shish | tez | tez |
| Boshiga qo’shish | sekin | — |
| Tartib saqlanishi | ✅ | ro’yxatdagidek emas |
Ya’ni “qidirish ko’p bo’ladigan” joyda ro’yxat o’rniga to’plam yoki lug’at tanlash — eng arzon tezlashtirish usuli.
Satrlarni birlashtirish
Yana bir keng tarqalgan sekinlik manbai — satrlarni + bilan qo’shish:
Sabab o’tgan darsda ko’rilgan: satr
o’zgarmas tur. Har + amalida yangi satr yaratiladi va eskisi tashlanadi.
join() esa hammasini bir marta birlashtiradi.
Ro’yxat generatorlari
Sikl o’rniga ro’yxat generatori odatda tezroq va o’qishga qulayroq:
Tezlashtirish tartibi
Amaliy ish tartibi quyidagicha:
- Ishlaydigan kod yozing. Tezlik keyingi masala.
- O’lchang. Qaysi qism sekin ekanini aniqlang.
- Algoritmni ko’rib chiqing. Eng katta yutuq shu yerda.
- Mos turni tanlang. Qidirish ko’p bo’lsa — to’plam yoki lug’at.
- Qayta o’lchang. Yaxshilanganini tasdiqlang.
Amaliy mashq
Avval o’lchang:
- 100000 elementli ro’yxat yarating;
inoperatori bilan oxirgi elementni qidiring vatime.perf_counter()bilan vaqtini o’lchang;- xuddi shu ma’lumotni
set()ga o’tkazib, qidiruvni takrorlang; - ikki vaqtni solishtiring;
- satrlarni
+=bilan 10000 marta birlashtiring, so’ngjoin()bilan qiling va o’lchang.
Qaysi o’zgarish kattaroq farq berdi — tur tanlashmi yoki usulmi?
Qisqacha xulosa
- Taxmin qilmang — o’lchang:
time.perf_counter(). - Eng katta yutuq algoritmni o’zgartirishdan keladi, tilni almashtirishdan emas.
- Qidirish ko’p bo’lsa, ro’yxat o’rniga to’plam yoki lug’at ishlating.
- Satrlarni
+emas,"".join()bilan birlashtiring. - Ro’yxat generatori oddiy sikldan tezroq.
- Avval to’g’ri va sodda yozing; tezlashtirish — o’lchovdan keyingi qadam.
Keyingi darsda loyiha strukturasi — kod kattalashganda fayllarni qanday tartibga solish kerakligini ko’ramiz.