Mundarija (24)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Kompyuter aslida nima
- 2.2. Nega aynan 0 va 1
- 2.3. Bit, bayt va o'lchov birliklari
- 2.4. Sanoq sistemalari: o'nlik, ikkilik, o'n oltilik
- 2.5. Ma'lumot qanday saqlanadi
- 2.6. CPU — protsessor, kompyuterning miyasi
- 2.7. RAM — operativ xotira
- 2.8. Disk — doimiy xotira
- 2.9. Xotira ierarxiyasi — eng muhim tushuncha
- 2.10. Bularning barchasi Python uchun nega muhim
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Bir xil son, uch ko'rinish
- Misol 2 — Harf aslida son ekanini ko'rish
- Misol 3 — Matn necha bayt egallashini o'lchash
- Misol 4 — Suzuvchi nuqta muammosini o'z ko'zingiz bilan ko'rish
- 5. To'g'ri va noto'g'ri tushunishlar
- 6. Keng tarqalgan xatolar va yechimlari
- 7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 8. Eng yaxshi amaliyotlar
- 9. Amaliy topshiriq
- Xulosa
1.1-dars: Kompyuter qanday ishlaydi — protsessor, xotira, disk va nega hammasi 0 va 1
1-QISM — KOMPYUTER VA DASTURLASH · 1-dars · Kirish sharti yo'q
1. Kirish va motivatsiya
Siz Python o'rganmoqchisiz. Lekin birinchi darsda print("Salom") yozmaymiz — chunki bu buyruq qayerda va qanday bajarilishini bilmasangiz, keyinchalik yuzlab savolga javob topolmaysiz.
Tasavvur qiling: siz avtomobil haydashni o'rganyapsiz. Rulni burish va pedalni bosishni yodlab olish mumkin — bir hafta ichida yo'lga chiqasiz. Lekin dvigatel nima ekanini, benzin qanday kuchga aylanishini bilmasangiz, mashina yo'l o'rtasida to'xtaganda faqat qo'l siltashdan boshqa narsa qila olmaysiz.
Dasturlashda ham xuddi shunday. Sintaksisni yodlash — bu rulni burishni o'rganish. Kompyuterni tushunish esa — dvigatelni tushunish.
Bu darsni tugatgach quyidagi savollarga ishonch bilan javob bera olasiz:
- Kompyuter faqat 0 va 1 bilan ishlasa, u qanday qilib o'zbekcha matn, rasm va videoni saqlaydi?
x = 5deb yozsam, bu beshlik qayerda turadi? Diskdami, xotiradami? Farqi nima?- Nega dastur ba'zida "sekin" ishlaydi yoki "xotira yetmadi" deb xato beradi?
- Nega deyarli hamma dasturlash tilida
0.1 + 0.2aniq0.3chiqmaydi? (Bu Python kamchiligi emas — bu kompyuterning tabiati.) - Nega fayl "500 MB", lekin operativ xotiraga sig'maydi?
Bu darsdagi tushunchalar butun kursning poydevori. Keyinchalik ro'yxatlar xotirada qanday joylashishi, nega list va tuple farq qiladi, nega katta faylni bir yo'la o'qish xato, Python obyektlari nega "og'ir" — hammasi shu yerda qo'yiladigan bilimga tayanadi.
Diqqat: bu darsda kod yozmaymiz. Python hali o'rnatilmagan — uni 2-qismda o'rnatamiz. Lekin 4-bo'limdagi misollarni o'shanda o'zingiz qaytarib ko'rasiz, shuning uchun ularni tashlab ketmang.
2. Nazariya — chuqur tushuntirish
2.1. Kompyuter aslida nima
Kompyuter — juda tez hisoblaydigan, lekin juda ahmoq mashina.
Bu ikkala so'z ham muhim:
- Tez. Oddiy noutbuk sekundiga milliardlab amal bajaradi. Odam bir amalni bajarguncha u milliardta ishni tugatadi.
- Ahmoq. U hech narsani "tushunmaydi". U faqat bir necha o'nlab juda sodda buyruqni biladi: ikkita sonni qo'sh, ikkita sonni solishtir, xotiraning falon joyidan qiymat ol, falon joyga yoz.
Kompyuter "Salom dunyo" degan gapni tushunmaydi. U hatto "harf" nima ekanini ham bilmaydi. U faqat elektr toki bor yoki yo'q ekanini sezadi.
Mana shu yerdan hamma narsa boshlanadi.
2.2. Nega aynan 0 va 1
Kompyuter ichida millionlab mayda kalitlar (tranzistorlar) bor. Har bir kalit ikki holatda bo'ladi:
- Tok o'tyapti → 1
- Tok o'tmayapti → 0
Savol tug'iladi: nega 10 ta holat qilib, odamdek 0 dan 9 gacha sanamaydi?
Javob ishonchlilikda. Elektr kuchlanishi doim biroz tebranadi. Agar biz 0 dan 9 gacha o'nta darajani belgilasak, ular bir-biriga juda yaqin bo'ladi va shovqin tufayli 5 ni 6 deb o'qib yuborish oson. Ikkita holat esa bir-biridan uzoq: "tok yo'q" va "tok bor". Ularni adashtirish deyarli mumkin emas.
O'xshatish: qorong'i xonada chiroqning yorug'ligini 10 darajaga bo'lib, qaysi darajada ekanini aniqlash qiyin. Lekin "chiroq yoniqmi yoki o'chiqmi?" degan savolga har doim aniq javob berasiz. Kompyuter ham shu yo'ldan boradi.
2.3. Bit, bayt va o'lchov birliklari
Bit (bit) — eng kichik birlik. Bitta 0 yoki bitta 1.
Bitta bit bilan ko'p narsa qilib bo'lmaydi — u faqat ikkita holatni ifodalaydi (masalan "ha/yo'q"). Shuning uchun bitlar guruhlanadi.
Bayt (byte) — 8 ta bit. Bir bayt bilan 2⁸ = 256 xil qiymat ifodalash mumkin (0 dan 255 gacha).
Nega aynan 8? Tarixiy sabab: 8 bit ingliz alifbosi, raqamlar va tinish belgilarini sig'dirishga yetarli edi va bu o'lcham qulay bo'lib qoldi.
Kattaroq birliklar:
| Birlik | Nechta bayt | Taxminan nima sig'adi |
|---|---|---|
| 1 bayt (B) | 1 | Bitta lotin harfi |
| 1 kilobayt (KB) | 1 024 | Yarim sahifa matn |
| 1 megabayt (MB) | 1 024 KB | Bitta kitob yoki bitta rasm |
| 1 gigabayt (GB) | 1 024 MB | Yarim soatlik video |
| 1 terabayt (TB) | 1 024 GB | Katta film kutubxonasi |
Nega 1000 emas, 1024? Chunki kompyuter ikkilik sanoqda ishlaydi va 1024 = 2¹⁰. Bu "yumaloq son"ning kompyuterdagi ko'rinishi. Aynan shu sabab 500 GB disk sotib olganingizda kompyuter "465 GB" deb ko'rsatadi — disk ishlab chiqaruvchilari 1000 ga bo'ladi, operatsion tizim esa 1024 ga.
2.4. Sanoq sistemalari: o'nlik, ikkilik, o'n oltilik
Biz kundalik hayotda o'nlik (decimal) sanoqdan foydalanamiz — 0 dan 9 gacha o'nta raqam. Sababi oddiy: qo'limizda o'nta barmoq bor.
Kompyuter ikkilik (binary) sanoqda ishlaydi — faqat 0 va 1.
Dasturchilar esa ko'pincha o'n oltilik (hexadecimal) sanoqni ishlatadi — 0 dan 9 gacha raqamlar va A dan F gacha harflar.
Bir xil sonning uch ko'rinishi:
| O'nlik | Ikkilik | O'n oltilik |
|---|---|---|
| 0 | 0 | 0 |
| 5 | 101 | 5 |
| 10 | 1010 | A |
| 15 | 1111 | F |
| 16 | 10000 | 10 |
| 255 | 11111111 | FF |
Ikkilik sonni o'nlikka qanday o'tkazamiz? Har bir o'rin ikkining darajasini bildiradi, o'ngdan chapga qarab:
Ikkilik: 1 0 1 1
O'rin: 2³ 2² 2¹ 2⁰
Qiymat: 8 0 2 1 → 8 + 0 + 2 + 1 = 11Nega o'n oltilik kerak? Chunki ikkilik sonlar juda uzun bo'ladi. 11111111 ni yozgandan ko'ra FF deb yozish qulayroq. Va bitta o'n oltilik raqam aynan to'rtta bitni ifodalaydi — o'tkazish oson.
Bularni hozir yodlashingiz shart emas. Muhimi — bir xil son turli ko'rinishda yozilishi mumkinligini tushunish. Python bularning hammasini biladi va siz ular orasida bemalol o'tasiz.
2.5. Ma'lumot qanday saqlanadi
Endi eng qiziq savol: agar kompyuter faqat sonlarni bilsa, matn, rasm va musiqa qayerdan keladi?
Javob: hamma narsa songa aylantiriladi. Bu kelishuv (konvensiya) — odamlar "bu son bu narsani bildiradi" deb kelishib olishgan.
Matn. Har bir harfga son biriktirilgan. Masalan A harfi 65 raqami bilan saqlanadi, B — 66, a — 97. Bu jadval ASCII deb ataladi va u faqat ingliz alifbosini qamraydi.
Lekin o'zbekcha o', ruscha ж, xitoycha 中 yoki emoji 🙂 chi? Ular uchun Unicode yaratilgan — dunyodagi deyarli barcha belgiga son biriktirgan ulkan jadval. Uni saqlashning eng keng tarqalgan usuli — UTF-8.
UTF-8 da muhim nozik jihat bor: har bir belgi bir xil joy egallamaydi.
- Lotin harfi (
a) — 1 bayt - Kirill harfi (
ж) — 2 bayt - Xitoy ieroglifi (
中) — 3 bayt - Emoji (
🙂) — 4 bayt
Aynan shuning uchun "Salom" so'zi 5 bayt, "Салом" esa 10 bayt egallaydi. Bu keyinchalik fayl bilan ishlaganda muhim bo'ladi.
Sonlar. Butun sonlar ikkilik ko'rinishda to'g'ridan-to'g'ri saqlanadi. Kasr sonlar esa murakkabroq — ular suzuvchi nuqta (floating point) usulida saqlanadi va bu yerda mashhur muammo tug'iladi.
Kompyuter 0.1 ni aniq saqlay olmaydi. Xuddi biz 1/3 ni o'nlik kasrda aniq yoza olmaganimizdek (0.3333... cheksiz davom etadi), kompyuter ham 0.1 ni ikkilikda aniq yoza olmaydi. U eng yaqin qiymatni saqlaydi.
Natijada:
0.1 + 0.2 → 0.30000000000000004Bu Python xatosi emas. Bu JavaScript'da ham, Java'da ham, C'da ham shunday. Bu — kompyuterda kasr sonni saqlashning tabiiy chegarasi. Pul bilan ishlaganda buni albatta hisobga olish kerak va biz buni 2-qismda o'rganamiz.
Rasm. Rasm — mayda nuqtalar (piksel) to'plami. Har bir piksel uchta son bilan yoziladi: qizil, yashil va ko'k rangning miqdori (har biri 0–255). Shuning uchun 1920×1080 o'lchamdagi rasm ≈ 1920 × 1080 × 3 ≈ 6 million bayt ≈ 6 MB joy egallaydi (siqilmagan holda).
Ovoz va video ham xuddi shunday — o'lchangan qiymatlar ketma-ketligi.
Xulosa: kompyuterda hamma narsa son. Farq faqat o'sha sonni qanday talqin qilishimizda.
2.6. CPU — protsessor, kompyuterning miyasi
CPU (Central Processing Unit) — hisoblashni bajaradigan qism.
U aslida juda sodda ish qiladi va buni tinimsiz takrorlaydi:
- Xotiradan keyingi buyruqni oladi (fetch)
- Buyruq nima ekanini aniqlaydi (decode)
- Uni bajaradi (execute)
- Natijani xotiraga yozadi (write back)
- Boshiga qaytadi
Bu sikl sekundiga milliardlab marta takrorlanadi. Protsessorning chastotasi (masalan 3 GHz) shu tezlikni bildiradi: 3 GHz ≈ sekundiga 3 milliard sikl.
Yadro (core) — CPU ichidagi mustaqil hisoblovchi birlik. 8 yadroli protsessor bir vaqtning o'zida 8 ta ishni haqiqatan parallel bajara oladi.
Muhim eslatma: Pythonda ko'p yadrodan foydalanish o'ziga xos cheklovga ega — GIL deb ataladigan mexanizm bor. Bu haqda 3-bosqichda batafsil gaplashamiz. Hozircha shuni bilib qo'ying: "8 yadroli kompyuterda Python dasturi avtomatik 8 barobar tez ishlamaydi."
2.7. RAM — operativ xotira
RAM (Random Access Memory) — dastur ishlab turganda ma'lumot saqlanadigan joy.
Uchta muhim xususiyati:
- Tez. Diskdan yuzlab marta tezroq.
- Vaqtinchalik. Tok o'chsa — hamma narsa yo'qoladi.
- Kichik. Odatda 8–32 GB, disk esa 500 GB–2 TB.
Siz Pythonda x = 5 deb yozganingizda, o'sha beshlik RAM'da turadi. Dastur tugagach yo'qoladi.
O'xshatish: RAM — ish stolingiz. Unga hozir kerak bo'lgan narsalarni qo'yasiz: tez olasiz, tez qo'yasiz. Lekin stol kichik va kechqurun uni tozalab ketasiz.
Aynan shu sabab "xotira yetmadi" (MemoryError) xatosi paydo bo'ladi: 8 GB RAM bo'lgan kompyuterda 20 GB lik faylni butunlay o'qimoqchi bo'lsangiz, joy yetmaydi. Yechim — faylni bo'lak-bo'lak o'qish. Buni 4-bosqichda o'rganamiz.
2.8. Disk — doimiy xotira
Disk (SSD yoki HDD) — ma'lumot doimiy saqlanadigan joy.
- Sekin. RAM'dan ancha sekin (SSD bo'lsa ham).
- Doimiy. Tok o'chsa ham saqlanadi.
- Katta. RAM'dan o'nlab marta ko'p.
Fayllaringiz, dasturlar, operatsion tizim — hammasi shu yerda.
O'xshatish: disk — shkaf yoki arxiv. Ko'p narsa sig'adi va yo'qolmaydi, lekin har safar borib olish vaqt oladi.
SSD va HDD farqi: HDD ichida aylanadigan disk va mexanik boshcha bor — u jismonan harakatlanadi, shuning uchun sekin. SSD da harakatlanuvchi qism yo'q, u xotira chiplaridan iborat — shuning uchun bir necha barobar tez.
2.9. Xotira ierarxiyasi — eng muhim tushuncha
Kompyuterdagi xotira bir xil emas. U piramida shaklida joylashgan:
┌─────────────┐
│ Registrlar │ eng tez, eng kichik (bir necha bayt)
├─────────────┤
│ Kesh L1 │ juda tez, kichik (bir necha KB)
│ Kesh L2 │
│ Kesh L3 │
├─────────────┤
│ RAM │ tez, o'rtacha (GB)
├─────────────┤
│ Disk │ sekin, katta (TB)
├─────────────┤
│ Tarmoq │ eng sekin (cheksiz)
└─────────────┘Yuqoriga chiqqan sari tezroq, lekin kichikroq va qimmatroq. Pastga tushgan sari sekinroq, lekin kattaroq va arzonroq.
Taxminiy tezlik farqi (odam tushunadigan miqyosga o'girilgan):
| Qayerdan | Haqiqiy vaqt | Agar registr = 1 soniya bo'lsa |
|---|---|---|
| Registr | ~0,3 nanosekund | 1 soniya |
| L1 kesh | ~1 nanosekund | 3 soniya |
| RAM | ~100 nanosekund | 5 daqiqa |
| SSD | ~100 mikrosekund | 4 kun |
| HDD | ~10 millisekund | 1 yil |
| Tarmoq (boshqa qit'a) | ~150 millisekund | 15 yil |
Bu jadval nega muhim? Chunki dasturingiz sekin ishlashining eng keng tarqalgan sababi — noto'g'ri joydan ma'lumot olish. Diskka yoki tarmoqqa keraksiz murojaat qilish RAM'dagi ishdan minglab marta qimmat.
Butun kurs davomida biz shu jadvalga qaytamiz: kesh nega kerak, ma'lumotlar bazasi indeksi nega tezlashtiradi, nega API so'rovini sikl ichida qilmaslik kerak — hammasi shu yerdan kelib chiqadi.
2.10. Bularning barchasi Python uchun nega muhim
Endi aniq bog'lay:
| Tushuncha | Pythonda qanday ko'rinadi |
|---|---|
| Hamma narsa son | Matn UTF-8 da saqlanadi; "Salom" va "Салом" turlicha joy egallaydi |
| Suzuvchi nuqta | 0.1 + 0.2 != 0.3; pul uchun Decimal ishlatiladi |
| RAM cheklangan | Katta faylni bir yo'la o'qish MemoryError beradi |
| RAM vaqtinchalik | Dastur tugagach o'zgaruvchilar yo'qoladi; saqlash uchun faylga yozish kerak |
| Xotira ierarxiyasi | Sikl ichida diskka murojaat — sekinlikning eng keng tarqalgan sababi |
| CPU yadrolari | Python'da GIL bor; parallellik alohida yondashuv talab qiladi |
3. Tez ma'lumotnoma
O'lchov birliklari
1 bayt = 8 bit
1 KB = 1 024 bayt
1 MB = 1 024 KB
1 GB = 1 024 MB
1 TB = 1 024 GBBir bayt nechta qiymat ifodalaydi
2⁸ = 256 → 0 dan 255 gachaUTF-8 da belgi hajmi
Lotin harfi 1 bayt
Kirill harfi 2 bayt
Xitoy ieroglifi 3 bayt
Emoji 4 baytTezlik tartibi (eng tezdan eng sekinga)
Registr → Kesh → RAM → SSD → HDD → Tarmoq4. Batafsil misollar
Bu misollarni 2-qismda Python o'rnatgach o'zingiz qaytarasiz. Hozircha natijani o'qib, nima sodir bo'layotganini tushunish yetarli. Har bir misol yuqoridagi nazariyani "ko'rsatib" beradi.
Misol 1 — Bir xil son, uch ko'rinish
son = 255
# Python sonni turli sanoq sistemalarida ko'rsata oladi
print(son) # 255 — o'nlik
print(bin(son)) # 0b11111111 — ikkilik ("0b" old qo'shimchasi)
print(hex(son)) # 0xff — o'n oltilik ("0x" old qo'shimchasi)
# Teskarisi ham ishlaydi: yozilishi har xil, qiymati bir xil
print(0b1011) # 11
print(0xff) # 255
print(255 == 0xff) # True — bu bitta sonning ikki yozuviNima ko'rsatdi: 2.4-bo'limda aytilgani — bir son, uch ko'rinish. 0b va 0x — bu Pythonga "bu sonni qaysi sanoqda o'qishni" aytadigan belgi.
Misol 2 — Harf aslida son ekanini ko'rish
# ord() — belgini uning Unicode raqamiga o'giradi
print(ord("A")) # 65
print(ord("B")) # 66
print(ord("a")) # 97
# chr() — teskarisi: raqamdan belgi
print(chr(65)) # A
print(chr(8364)) # € — evro belgisi
# Demak harflar ustida arifmetika ham mumkin
print(chr(ord("A") + 1)) # BNima ko'rsatdi: 2.5-bo'limdagi asosiy g'oya — harf aslida son. A va 65 — bir narsaning ikki ko'rinishi.
Misol 3 — Matn necha bayt egallashini o'lchash
# encode() matnni baytlarga o'giradi — diskka aynan shu yoziladi
print(len("Salom")) # 5 — belgilar soni
print(len("Salom".encode("utf-8"))) # 5 — baytlar soni
print(len("Салом")) # 5 — belgilar soni bir xil!
print(len("Салом".encode("utf-8"))) # 10 — lekin baytlar ikki barobar
print(len("🙂")) # 1 — bitta belgi
print(len("🙂".encode("utf-8"))) # 4 — lekin to'rt baytNima ko'rsatdi: 2.5-bo'limdagi eng muhim nozik jihat — belgilar soni va baytlar soni bir xil emas. Bu fayl hajmini hisoblashda, ma'lumotlar bazasida maydon uzunligini belgilashda va tarmoq orqali ma'lumot uzatishda muhim.
Misol 4 — Suzuvchi nuqta muammosini o'z ko'zingiz bilan ko'rish
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False — kutilmagan, lekin to'g'ri
# Nega? Chunki 0.1 aslida aniq 0.1 emas
print(f"{0.1:.20f}") # 0.10000000000000000555
# Pul bilan ishlaganda Decimal ishlatiladi
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2")) # 0.3
print(Decimal("0.1") + Decimal("0.2") == Decimal("0.3")) # TrueNima ko'rsatdi: 2.5-bo'limdagi ogohlantirish. Bu Pythonning kamchiligi emas — deyarli barcha tilda shunday. Yechimi bor va biz uni 2-qismda o'rganamiz.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Kompyuter aqlli" | Kompyuter juda tez, lekin juda sodda. U faqat bir necha o'nlab elementar buyruqni biladi |
| "Fayl diskda, o'zgaruvchi ham diskda" | O'zgaruvchi RAM'da. Diskka faqat siz maxsus yozganingizda tushadi |
| "1 belgi = 1 bayt" | Faqat lotin harflari uchun. O'zbekcha kirill, emoji va boshqalar ko'proq joy egallaydi |
"0.1 + 0.2 != 0.3 — Python xatosi" |
Bu deyarli barcha tilda shunday. Kompyuterda kasr sonni saqlash chegarasi |
| "Ko'proq RAM = doim tezroq" | RAM yetarli bo'lsa, qo'shimchasi tezlik bermaydi. Muammo ko'pincha algoritmda |
| "8 yadroli kompyuterda dastur 8 barobar tez" | Faqat dastur parallel yozilgan bo'lsa. Pythonda bunga GIL ham ta'sir qiladi |
| "SSD va HDD faqat hajm bilan farq qiladi" | SSD bir necha barobar tez, chunki mexanik qismi yo'q |
6. Keng tarqalgan xatolar va yechimlari
1. Katta faylni bir yo'la o'qishga urinish
Muammo: 10 GB lik faylni butunlay RAM'ga yuklamoqchi bo'lasiz, kompyuterda esa 8 GB RAM bor → MemoryError.
Yechim: faylni oqim (stream) sifatida, qator-qator o'qish. 4-bosqichda o'rganamiz.
2. Kasr sonlarni tenglikka solishtirish
Muammo: if narx == 0.3: deb yozasiz, lekin shart hech qachon bajarilmaydi.
Yechim: pul uchun Decimal, boshqa hollarda taxminiy solishtirish (math.isclose).
3. Matn hajmini belgilar soni bilan hisoblash
Muammo: bazada VARCHAR(10) deb belgilaysiz, "Салом дунё" esa 10 belgi bo'lsa ham 19 bayt egallaydi va sig'maydi.
Yechim: chegarani baytlarda hisoblash yoki UTF-8 ni to'g'ri qo'llab-quvvatlaydigan sozlamani tanlash.
4. Kodlashni noto'g'ri ko'rsatish
Muammo: fayl UTF-8 da yozilgan, siz uni boshqa kodlashda o'qiysiz → matn "krakozyabra" bo'lib chiqadi yoki UnicodeDecodeError beradi.
Yechim: doim encoding="utf-8" ni aniq ko'rsatish. 4-bosqichda batafsil.
5. Sikl ichida diskka yoki tarmoqqa murojaat
Muammo: 1000 marta aylanadigan siklda har safar fayl ochiladi yoki API chaqiriladi → dastur juda sekin.
Yechim: ma'lumotni bir marta olib RAM'da saqlash. 2.9-bo'limdagi jadvalga qarang — farq minglab marta.
7. Integratsiya — bu bilim qayerda kerak bo'ladi
Bu darsdagi tushunchalar kursning quyidagi joylarida qaytadan uchraydi:
- 2-qism (Asoslar):
int,float,boolturlari — 2.5-bo'limdagi son saqlash usullari - 4-qism (Satrlar): Unicode,
encode/decode— 2.5-bo'lim davomi - 6-qism (Ma'lumot tuzilmalari): ro'yxat va lug'at xotirada qanday joylashadi
- 11-qism (Obyekt modeli va xotira): reference counting, axlat yig'uvchi — 2.7-bo'lim chuqurlashtirilgan
- 12-qism (CPython): bytecode, GIL — 2.6-bo'lim chuqurlashtirilgan
- 14-qism (Konkurentlik): yadrolar, oqimlar, jarayonlar
- 16-qism (Ma'lumot formatlari): katta faylni oqim bilan o'qish
- 23-qism (Bazalar): indeks nega tezlashtiradi — 2.9-bo'limdagi ierarxiya
- 29-qism (Miqyos): kesh strategiyalari, unumdorlik
8. Eng yaxshi amaliyotlar
"Bu qayerda turibdi?" deb so'rang. Yangi tushuncha ko'rganingizda o'zingizdan so'rang: bu RAM'dami, diskdami, tarmoqdami? Bu savol ko'p muammoni oldindan ko'rsatadi.
Kasr songa ishonmang. Pul, o'lchov yoki aniqlik muhim bo'lgan joyda
floatemas,Decimalishlating.Kodlashni doim aniq yozing.
encoding="utf-8"— bu ortiqcha yozuv emas, kelajakdagi xatoning oldini olish.Hajmni baytlarda o'ylang. Ayniqsa o'zbekcha yoki ruscha matn bilan ishlaganda belgilar soni yetarli o'lchov emas.
Sekinlik sababini ierarxiyadan qidiring. Dastur sekin bo'lsa, birinchi savol: u keraksiz ravishda diskka yoki tarmoqqa murojaat qilyaptimi?
Yodlamang — tushuning. Ikkilik sonlarni yoddan bilish shart emas. Muhimi: nega ular kerakligini va Python ular bilan qanday ishlashini bilish.
9. Amaliy topshiriq
Bu topshiriqni 2-qismda Python o'rnatgach bajarasiz. Hozircha uni o'qib qo'ying — nimaga e'tibor berish kerakligini bilib turasiz.
Vazifa: "Kompyuter ko'zi bilan" nomli kichik tekshiruvchi
Foydalanuvchidan matn so'raydigan va u haqida quyidagilarni ko'rsatadigan dastur yozing:
- Matndagi belgilar soni
- Matn UTF-8 da necha bayt egallashi
- Har bir belgining Unicode raqami
- Umumiy hajm KB da
Kutilayotgan natija:
Matn kiriting: Salom
Belgilar soni : 5
Baytlar soni : 5
Hajmi : 0.005 KB
Belgilar:
S -> 83
a -> 97
l -> 108
o -> 111
m -> 109Qo'shimcha (o'ylab ko'ring):
- Xuddi shu dasturga "Салом" deb kiriting. Belgilar soni bir xil, baytlar soni nega boshqacha?
- Emoji kiriting. Nima bo'ladi?
- 1 000 000 ta belgidan iborat matn necha MB egallaydi? Avval hisoblab ko'ring, keyin tekshiring.
Nimani mustahkamlaydi: 2.3, 2.4 va 2.5-bo'limlar — bayt, Unicode va matn saqlash.
Xulosa
Bu darsda kod yozmadik, lekin butun kursning poydevorini qo'ydik.
Eng muhim uch fikr:
- Kompyuter faqat sonlarni biladi. Matn, rasm, ovoz — hammasi kelishuv asosida songa aylantirilgan.
- Xotira bir xil emas. Registr, kesh, RAM, disk, tarmoq — orasidagi tezlik farqi minglab marta. Dastur tezligi ko'pincha shu tanlovga bog'liq.
- Kompyuterning chegaralari bor. Kasr sonlar aniq emas, RAM cheklangan. Bu kamchilik emas — bu bilib ishlash kerak bo'lgan haqiqat.
Keyingi darsda dastur nima ekanini va u qanday bajarilishini ko'ramiz — kompyuter sizning yozgan matningizni qanday qilib bajariladigan buyruqqa aylantiradi.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!