Mundarija (24)
- 1. Kirish va motivatsiya
- 2. Nazariya — chuqur tushuntirish
- 2.1. Guido van Rossum va 1989-yilning Rojdestvo ta'tili
- 2.2. ABC dan olingan saboqlar
- 2.3. Vaqt chizig'i
- 2.4. "BDFL" — mehribon umrbod diktator
- 2.5. PEP — Pythonni o'zgartirish yo'li
- 2.6. Pythonning Zeni — 19 tamoyil
- 2.7. Bo'sh joy — eng ko'p bahs qilinadigan qaror
- 2.8. Python 2 dan 3 ga o'tish — qimmat saboq
- 2.9. "Pythonik" nima degani
- 2.10. Pythonning bugungi holati
- 3. Tez ma'lumotnoma
- 4. Batafsil misollar
- Misol 1 — Zenni to'liq o'qish
- Misol 2 — "Oshkora yashirindan yaxshi" amalda
- Misol 3 — "Xatolar jimgina o'tmasin"
- Misol 4 — Pythonik va pythonik bo'lmagan kod
- 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.5-dars: Python tarixi va falsafasi — kim, qachon va nega yaratgan
1-QISM — KOMPYUTER VA DASTURLASH · 5-dars · Oldingi dars: kompilyator, interpretator va JIT
1. Kirish va motivatsiya
Tilning tarixini bilish — bu qiziqarli ma'lumot emas. Bu amaliy foyda.
Har bir tilning dizayni uning yaratilish sababidan kelib chiqadi. C tezlik uchun yaratilgan — shuning uchun u xavfsizlikni dasturchiga topshiradi. Java korporativ tizimlar uchun — shuning uchun u ko'p yozishni talab qiladi, lekin ishonchli. Python esa odam vaqtini tejash uchun yaratilgan — va bu qaror tilning har bir burchagida ko'rinadi.
Bu darsni tugatgach quyidagilarni tushunasiz:
- Nega Pythonda blok qavs bilan emas, bo'sh joy bilan ajratiladi (bu g'alati qaror emas — sababi bor)
- Nega Pythonda bitta ishni qilishning odatda bitta yo'li bor, JavaScript'da esa beshta
- PEP nima va nega Python foydalanuvchilari bu so'zni tez-tez ishlatadi
- Nega Python 2 dan 3 ga o'tish shunchalik og'riqli bo'lgan va bundan qanday saboq olingan
- "Pythonik kod" nima degani va nega bu shunchaki uslub emas
Va eng muhimi: siz Pythonni tasodifiy qoidalar to'plami deb emas, izchil falsafaga qurilgan tizim deb ko'ra boshlaysiz. Bu farq sizning kodingiz sifatiga bevosita ta'sir qiladi.
2. Nazariya — chuqur tushuntirish
2.1. Guido van Rossum va 1989-yilning Rojdestvo ta'tili
Python Guido van Rossum ismli golland dasturchisi tomonidan yaratilgan.
1989-yil dekabrida u Amsterdamdagi CWI ilmiy institutida ishlar edi. Rojdestvo ta'tili boshlandi, institut yopildi, uyda bo'sh vaqt paydo bo'ldi. Guido o'zi aytganidek — "hobby loyihasi" sifatida yangi tilni yozishga kirishdi.
Bu bo'sh joydan paydo bo'lgan g'oya emas edi. Guido bundan oldin ABC degan tilda ishlagan. ABC o'qitish uchun mo'ljallangan, juda toza tuzilishga ega edi — lekin amalda muvaffaqiyatsiz chiqdi. Sababi: u yopiq edi. Yangi imkoniyat qo'shish, tizim bilan ishlash, fayl o'qish — bularning hammasi qiyin edi.
Guido shu saboqni oldi: tilning o'zi toza bo'lsin, lekin u kengaytiriladigan bo'lsin.
Nomi esa ilondan emas — Guido "Monty Python's Flying Circus" degan britaniyalik komediya guruhining muxlisi edi. Shuning uchun Python hujjatlarida hazil misollar (spam, eggs) hali ham uchraydi.
2.2. ABC dan olingan saboqlar
Python ABC dan nimani olgan va nimani rad etgan — bu tilni tushunishning kaliti.
Olingan:
| ABC dan | Pythonda |
|---|---|
| Bo'sh joy bilan bloklash | if x: dan keyin chekinish |
| Yuqori darajali ma'lumot tuzilmalari | list, dict tilning o'zida |
| O'qilishga urg'u | Sintaksis inglizchaga yaqin |
| Turni e'lon qilish shart emas | Dinamik turlash |
Rad etilgan:
| ABC muammosi | Pythonning yechimi |
|---|---|
| Yopiq tizim, kengaytirib bo'lmasdi | C bilan integratsiya boshidanoq ko'zda tutilgan |
| Faylga, tizimga kirish qiyin | Standart kutubxona boy |
| Monolit | Modullar tizimi |
Aynan kengaytirish imkoniyati Pythonni bugungi holatga olib keldi. numpy, pandas, PyTorch — hammasi C bilan bog'lanish mumkinligi tufayli mavjud. ABC bunday qila olmasdi va shuning uchun unutildi.
Saboq: til faqat sintaksis emas. Uning atrofida nima qurish mumkinligi ko'pincha muhimroq.
2.3. Vaqt chizig'i
1989 Guido Rojdestvo ta'tilida ishni boshlaydi
1991 Python 0.9.0 — birinchi ommaviy chiqish
(klasslar, istisnolar, funksiyalar allaqachon bor)
1994 Python 1.0 — lambda, map, filter, reduce
2000 Python 2.0 — list comprehension, axlat yig'uvchi (sikllar uchun)
2008 Python 3.0 — orqaga moslik buziladi
2010 Python 2.7 — 2.x ning oxirgi versiyasi
2018 Guido "BDFL" lavozimidan ketadi
2020 Python 2 rasman to'xtatiladi
2021 Python 3.10 — match/case
2023 Python 3.12 — sezilarli tezlik yaxshilanishi
2024+ Python 3.13 — eksperimental JIT, GIL'siz rejimDiqqat qiling: Python 1991-yildan beri mavjud — JavaScript'dan 4 yil oldin. U "yangi til" emas, 35 yillik tarixga ega.
2.4. "BDFL" — mehribon umrbod diktator
Python uzoq vaqt g'ayrioddiy boshqaruv modeliga ega edi. Guido BDFL (Benevolent Dictator For Life — mehribon umrbod diktator) deb atalardi.
Ma'nosi: jamoa muhokama qiladi, taklif beradi, bahslashadi — lekin oxirgi qaror Guidoda.
Bu g'alati tuyulishi mumkin, lekin amalda yaxshi ishladi. Natijasi — izchillik. Pythonda "ikkita raqobatlashuvchi yondashuv" kam uchraydi, chunki bitta odam yakuniy qarorni qabul qilib, tilni bir yo'nalishda ushlab turgan.
2018-yilda Guido ketdi (charchagani va bir taklif atrofidagi keskin bahs sababli). Endi Python Steering Council — besh kishilik saylanadigan kengash tomonidan boshqariladi.
2.5. PEP — Pythonni o'zgartirish yo'li
PEP (Python Enhancement Proposal — Pythonni yaxshilash taklifi) — tilga o'zgartirish kiritish uchun rasmiy hujjat.
Kimdir yangi imkoniyat taklif qilmoqchi bo'lsa, u PEP yozadi: nima taklif qilinyapti, nega kerak, muqobillar nima, orqaga moslikka ta'siri qanday.
Mashhur PEP lar:
| PEP | Nima | Nega muhim |
|---|---|---|
| PEP 8 | Kod yozish uslubi | Butun jamoa shunga amal qiladi |
| PEP 20 | Pythonning Zeni | Til falsafasi |
| PEP 484 | Tur belgilari | def f(x: int) -> str |
| PEP 572 | Walrus operatori := |
Guidoning ketishiga sabab bo'lgan bahs |
| PEP 703 | GIL'siz Python | Kelajakdagi eng katta o'zgarish |
PEP 8 nega bunchalik muhim? Chunki u kod yozish uslubini standartlashtirgan: 4 ta bo'sh joy, qator uzunligi, nomlash qoidalari. Natijada butun dunyodagi Python kodi bir xil ko'rinadi. Boshqa tilda har jamoa o'z uslubini o'ylab topadi.
Siz ham PEP 8 ga amal qilasiz — va ruff yoki black kabi vositalar buni avtomatik qiladi (18-qism).
2.6. Pythonning Zeni — 19 tamoyil
1999-yilda Tim Peters ismli dasturchi Pythonning dizayn falsafasini 19 ta qisqa jumlaga jamladi. U tilga hazil sifatida kiritilgan — import this deb yozsangiz chiqadi:
import thisEng muhimlarini ko'rib chiqamiz.
"Beautiful is better than ugly" — chiroyli xunukdan yaxshi.
Kod bir marta yoziladi, lekin o'nlab marta o'qiladi. Chiroyli kod — bezak emas, tejamkorlik.
"Explicit is better than implicit" — oshkora yashirindan yaxshi.
# Yashirin — nima qaytishini bilib bo'lmaydi
from modul import *
# Oshkora — aniq
from modul import hisobla, tekshirAynan shu tamoyil sababli Pythonda JavaScript'dagi kabi avtomatik tur aylantirish yo'q: 1 + "2" xato beradi, chunki Python sizning niyatingizni taxmin qilmaydi.
"Simple is better than complex. Complex is better than complicated."
Bu ikki jumla nozik farqni ko'rsatadi:
- Complex (murakkab) — masala haqiqatan murakkab, yechim ham murakkab
- Complicated (chalkash) — sodda masala keraksiz murakkab qilingan
Ikkinchisi — dasturchining aybi.
"Readability counts" — o'qilishi muhim.
Bu Pythonning eng mashhur tamoyili. Va u shunchaki maslahat emas — u sintaksisda majburlangan.
"There should be one — and preferably only one — obvious way to do it."
Bu Pythonni Perl va JavaScript'dan ajratadi. Ular "bir ishni ko'p yo'l bilan qilish mumkin" deb faxrlanadi. Python teskarisini aytadi: bitta ravshan yo'l bo'lsin.
Nega? Chunki begona kodni o'qiyotganda siz "bu odam qaysi usuldan foydalangan?" deb o'ylamaysiz.
"Errors should never pass silently" — xatolar jimgina o'tmasin.
# Python — xato darhol ko'rinadi
print(1 + "2") # TypeError
# JavaScript — jimgina noto'g'ri natija
// console.log(1 + "2"); → "12"Ikkinchi holat xavfliroq: dastur ishlashda davom etadi, lekin natija noto'g'ri.
"Now is better than never. Although never is often better than right now."
Ish qilish kerak — lekin shoshilib emas. Bu Python 3 ga o'tishning sekin, lekin puxta o'tkazilishini tushuntiradi.
2.7. Bo'sh joy — eng ko'p bahs qilinadigan qaror
Pythonning eng ko'zga tashlanadigan xususiyati — blok qavs bilan emas, chekinish (indentation) bilan ajratiladi.
if x > 0:
print("Musbat")
print("Ikkinchi qator")
print("Bu shartdan tashqarida")if (x > 0) {
console.log("Musbat");
console.log("Ikkinchi qator");
}
console.log("Bu shartdan tashqarida");Boshlovchilar ko'pincha buni g'alati deb hisoblaydi. Lekin mantiq oddiy:
Boshqa tillarda ham dasturchilar baribir chekinish qo'yadi. Ya'ni kodda ikkita tuzilma bor: qavslar (kompyuter uchun) va chekinish (odam uchun). Va ular bir-biriga zid bo'lishi mumkin:
// Bu kod aldaydi: chekinish bir narsa deydi, qavslar boshqa
if (x > 0)
console.log("Birinchi");
console.log("Ikkinchi"); // Bu SHART ICHIDA EMAS!Bu haqiqiy xato manbai. 2014-yilda Apple'ning SSL kodida aynan shunday xato topilgan (goto fail) — u xavfsizlik zaifligiga olib kelgan.
Python bu muammoni ildizidan yo'q qildi: chekinish — sintaksisning o'zi. Ko'rganingiz — bajariladigan narsa.
Narxi: bo'sh joyga e'tiborsiz bo'lish mumkin emas. Tabulyatsiya va bo'sh joyni aralashtirsangiz IndentationError chiqadi. Shuning uchun doim 4 ta bo'sh joy ishlating va muharrirni shunga sozlang.
2.8. Python 2 dan 3 ga o'tish — qimmat saboq
3-darsda bu o'tishni qisqacha ko'rdik. Endi nega bunchalik og'riqli bo'lganini tushunamiz.
2008-yilda Guido qiyin qarorga keldi: tilda to'plangan dizayn xatolarini tuzatish uchun orqaga moslikni ataylab buzish.
Asosiy tuzatishlar:
- Satrlar sukut bo'yicha Unicode (bu o'zbek, rus, xitoy tillari uchun hal qiluvchi)
print— buyruq emas, oddiy funksiya5 / 2endi2.5,2emas- Ko'p funksiya ro'yxat o'rniga iterator qaytaradi (xotira tejash)
Har biri alohida to'g'ri qaror edi. Muammo — ularning hammasi bir vaqtda kiritilgani.
Natijada:
- Mavjud kod ishlamay qoldi
- Kutubxonalar ko'chishi kerak edi, lekin ular bir-biriga bog'liq
- Hech kim birinchi bo'lib ko'chishni xohlamadi — "avval kutubxonalar ko'chsin"
Bu "tovuqmi yoki tuxummi" vaziyati 12 yil davom etdi.
Olingan saboqlar (bu bugungi Python'ga ta'sir qiladi):
- Orqaga moslikni buzmaslik. Bugun Python yangi imkoniyat qo'shganda eskisini deyarli hech qachon olib tashlamaydi.
- Bosqichma-bosqich o'tish. Yangi narsa avval ixtiyoriy bo'ladi (
from __future__ import), keyin standart. - Ogohlantirish davri uzoq. Eskiruvchi imkoniyat bir necha versiya davomida ogohlantirish beradi.
Aynan shuning uchun bugun Python 3.9 dan 3.12 ga o'tish deyarli og'riqsiz — jamoa saboq oldi.
2.9. "Pythonik" nima degani
Pythonik (pythonic) — Pythonning falsafasiga mos yozilgan kod.
Ishlaydigan kod yetarli emas. Quyidagi ikkala variant ham to'g'ri ishlaydi:
# Pythonik EMAS — boshqa tildan ko'chirilgan uslub
sonlar = [1, 2, 3, 4, 5]
i = 0
natija = []
while i < len(sonlar):
if sonlar[i] % 2 == 0:
natija.append(sonlar[i])
i = i + 1# Pythonik
sonlar = [1, 2, 3, 4, 5]
natija = [son for son in sonlar if son % 2 == 0]Ikkinchisi qisqaroq emas, balki niyatni ravshanroq ifodalaydi: "sonlar ichidan juftlarini ol". Birinchisi esa "qanday qilish" haqida — indeks oshirish, uzunlik tekshirish.
Bu farqni sezish vaqt talab qiladi. Kurs davomida biz har mavzuda "pythonik yo'l" ni alohida ko'rsatib boramiz.
2.10. Pythonning bugungi holati
Python bugun dunyodagi eng ko'p ishlatiladigan tillardan biri. TIOBE va Stack Overflow so'rovlarida u yillar davomida birinchi uchlikda.
Nega o'sdi?
- Ma'lumot va AI to'lqini. 2010-yillardan boshlab ilmiy hisoblash Pythonga ko'chdi.
numpy,pandas, keyinTensorFlowvaPyTorch. - O'rganish osonligi. Universitetlar birinchi til sifatida Pythonni tanlay boshladi.
- Kutubxonalar. PyPI da 500 000 dan ortiq paket. Deyarli har vazifaga tayyor yechim bor.
- Ko'p sohalilik. Web, avtomatlashtirish, ilm, DevOps — hammasida ishlatiladi.
Kelajak yo'nalishlari:
- Tezlik. 3.11 va 3.12 sezilarli tezlashdi, ish davom etyapti
- GIL'siz rejim (PEP 703) — ko'p yadroli parallellikning haqiqiy yechimi
- Turlar tizimi doimiy kengaymoqda
3. Tez ma'lumotnoma
Asosiy sanalar
1989 boshlangan 2008 Python 3.0
1991 0.9.0 2020 Python 2 to'xtatildi
2000 2.0 2024+ JIT va GIL'siz rejimMuhim PEP lar
PEP 8 — kod uslubi
PEP 20 — Zen (import this)
PEP 484 — tur belgilari
PEP 703 — GIL'siz PythonZenning asosiy tamoyillari
Chiroyli xunukdan yaxshi
Oshkora yashirindan yaxshi
Sodda murakkabdan yaxshi
O'qilishi muhim
Bitta ravshan yo'l bo'lsin
Xatolar jimgina o'tmasin4. Batafsil misollar
Misol 1 — Zenni to'liq o'qish
import thisChiqadi (qisqartirilgan):
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
...Nima ko'rsatdi: 2.6-bo'lim. Bu hazil (Easter egg), lekin undagi tamoyillar jiddiy — ular tilning dizayn qarorlarini belgilagan.
Misol 2 — "Oshkora yashirindan yaxshi" amalda
# YASHIRIN — bu funksiya qayerdan keldi? Bilib bo'lmaydi
from math import *
print(sqrt(16)) # 4.0 — lekin sqrt qaysi moduldan?
# OSHKORA — aniq ko'rinib turibdi
from math import sqrt
print(sqrt(16)) # 4.0
# YANA HAM OSHKORA — eng ravshan
import math
print(math.sqrt(16)) # 4.0Nima ko'rsatdi: 2.6-bo'limdagi tamoyil. import * ishlatmaslik — bu shunchaki qoida emas, falsafadan kelib chiqadi. Katta faylda sqrt ni ko'rganingizda uning manbasini darhol bilishingiz kerak.
Misol 3 — "Xatolar jimgina o'tmasin"
# Python: turlarni aralashtirmaydi
yosh = "25"
try:
keyingi_yil = yosh + 1
except TypeError as xato:
print(f"Xato ushlandi: {xato}")
# Xato ushlandi: can only concatenate str (not "int") to str
# To'g'ri yo'l — niyatni oshkora bildirish
keyingi_yil = int(yosh) + 1
print(keyingi_yil) # 26Xuddi shu kod JavaScript'da:
const yosh = "25";
const keyingiYil = yosh + 1;
console.log(keyingiYil); // "251" — xato yo'q, natija noto'g'riNima ko'rsatdi: 2.6-bo'limdagi tamoyil amalda. Python to'xtatadi, JavaScript davom etadi. Birinchisi qulaysizroq, lekin xavfsizroq.
Misol 4 — Pythonik va pythonik bo'lmagan kod
talabalar = [
{"ism": "Aziza", "ball": 85},
{"ism": "Bobur", "ball": 92},
{"ism": "Dilnoza", "ball": 78},
]
# ── Pythonik EMAS ──
ismlar = []
for i in range(len(talabalar)):
if talabalar[i]["ball"] >= 80:
ismlar.append(talabalar[i]["ism"])
print(ismlar)
# ── Pythonik ──
ismlar = [t["ism"] for t in talabalar if t["ball"] >= 80]
print(ismlar) # ['Aziza', 'Bobur']
# ── Yana bir misol: fayl bilan ishlash ──
# Pythonik EMAS — faylni yopishni unutish mumkin
f = open("matn.txt")
matn = f.read()
f.close()
# Pythonik — fayl avtomatik yopiladi
with open("matn.txt") as f:
matn = f.read()Nima ko'rsatdi: 2.9-bo'lim. Ikkinchi variantlar qisqaroq bo'lgani uchun emas, niyatni ravshanroq ifodalagani uchun yaxshi. with esa ustiga xatoga chidamli — istisno bo'lsa ham fayl yopiladi.
5. To'g'ri va noto'g'ri tushunishlar
| Noto'g'ri fikr | To'g'risi |
|---|---|
| "Python ilon nomidan" | Monty Python komediya guruhi nomidan |
| "Python yangi til" | 1991-yildan beri mavjud — JavaScript'dan eski |
| "Bo'sh joy bilan bloklash — g'alati qaror" | Bu ataylab qilingan: kod ko'ringanidek bajariladi |
| "Zen — shunchaki hazil" | Hazil shaklida, lekin tilning haqiqiy dizayn tamoyillari |
| "PEP 8 — majburiy qonun" | Tavsiya, lekin butun jamoa amal qiladi. Vositalar avtomatlashtiradi |
| "Guido hali ham qaror qabul qiladi" | 2018-dan beri Steering Council boshqaradi |
| "Python 3 ga o'tish yomon qaror edi" | Qaror to'g'ri, usul noto'g'ri edi — hammasi bir vaqtda |
| "Pythonik kod — qisqa kod" | Yo'q, ravshan kod. Ba'zan pythonik variant uzunroq bo'ladi |
6. Keng tarqalgan xatolar va yechimlari
1. Boshqa tilning uslubini Pythonga ko'chirish
Muammo: C yoki Java'dan kelgan dasturchi for i in range(len(ro'yxat)) yozadi.
Yechim: Pythonda to'g'ridan-to'g'ri element bo'ylab yuriladi: for element in ro'yxat. Indeks kerak bo'lsa — enumerate().
2. Tabulyatsiya va bo'sh joyni aralashtirish
Muammo: TabError yoki tushunarsiz IndentationError.
Yechim: doim 4 ta bo'sh joy. Muharrirda "Tab ni bo'sh joyga aylantirish" sozlamasini yoqing.
3. import * ishlatish
Muammo: nom qayerdan kelgani bilinmaydi, nomlar to'qnashishi mumkin.
Yechim: aniq import qiling — from math import sqrt yoki import math.
4. PEP 8 ni e'tiborsiz qoldirish
Muammo: har kim o'z uslubida yozadi, jamoada kod review qiyinlashadi.
Yechim: ruff va black vositalarini o'rnating — ular avtomatik to'g'irlaydi (18-qism).
5. Eski (Python 2) materialdan o'rganish
Muammo: print "salom" yoki raw_input() ko'rasiz va ishlatmoqchi bo'lasiz.
Yechim: material sanasiga qarang. Rasmiy hujjat — docs.python.org.
7. Integratsiya — bu bilim qayerda kerak bo'ladi
- 3-qism (Asoslar): PEP 8 nomlash qoidalari amalda
- 6-qism (Ma'lumot tuzilmalari): comprehension — pythonik uslubning asosi
- 10-qism (Ilg'or til): context manager (
with) va boshqa pythonik naqshlar - 13-qism (Turlar): PEP 484 va tur belgilari tarixi
- 14-qism (Konkurentlik): GIL va PEP 703
- 18-qism (Vositalar):
ruff,black— PEP 8 ni avtomatlashtirish - 19-qism (Paketlash): PyPI ekotizimi
8. Eng yaxshi amaliyotlar
import thisni vaqti-vaqti bilan o'qing. Tajriba ortgani sayin uning ma'nosi chuqurlashadi.PEP 8 ga amal qiling — lekin qo'lda emas.
blackvaruffbuni sizsiz qiladi."Bu pythonikmi?" deb so'rang. Kod ishlagach, ravshanroq yozish mumkinmi deb qarang.
import *dan voz keching. Hech qachon.4 ta bo'sh joy, tabulyatsiya yo'q. Muharrirni sozlang va unuting.
Yangi imkoniyat ko'rsangiz, PEP ini o'qing.
PEP 572deb qidirsangiz, nega qo'shilgani va qanday bahs bo'lganini bilasiz.
9. Amaliy topshiriq
Vazifa 1: Zenni tarjima qilish
import this dagi 19 tamoyildan beshtasini tanlang. Har biri uchun:
- O'zbekchaga tarjima qiling
- Uni buzadigan kod misolini yozing
- Unga amal qiladigan variantini yozing
Namuna:
"Explicit is better than implicit" — Oshkora yashirindan yaxshi.
Buzadi:
from os import *—pathqayerdan kelgani bilinmaydi Amal qiladi:from os import path
Vazifa 2: Tarixdan xulosa
Python 2 dan 3 ga o'tish 12 yil davom etdi. Savollarga javob yozing:
- Nega hech kim birinchi bo'lib ko'chishni xohlamadi?
- Agar siz Guido o'rnida bo'lsangiz, buni qanday boshqacha qilardingiz?
- Bugungi Python bu tajribadan qanday saboq oldi? (2.8-bo'limga qarang)
Vazifa 3: Pythonik qilib yozish
Quyidagi kod ishlaydi, lekin pythonik emas. Uni qayta yozing:
sonlar = [12, 7, 33, 8, 21, 4]
# 1) 10 dan katta sonlarni topish
katta = []
for i in range(len(sonlar)):
if sonlar[i] > 10:
katta.append(sonlar[i])
# 2) Barcha sonlar yig'indisi
jami = 0
for i in range(len(sonlar)):
jami = jami + sonlar[i]
# 3) Eng kattasini topish
eng_katta = sonlar[0]
for i in range(len(sonlar)):
if sonlar[i] > eng_katta:
eng_katta = sonlar[i]Pythonik variant
sonlar = [12, 7, 33, 8, 21, 4]
# 1) comprehension
katta = [son for son in sonlar if son > 10]
# 2) tayyor funksiya
jami = sum(sonlar)
# 3) tayyor funksiya
eng_katta = max(sonlar)E'tibor bering: uchala holatda ham "qanday qilish" o'rniga "nima kerak" yozildi. Va 2, 3-holatlarda Python allaqachon tayyor yechim bergan — uni qayta ixtiro qilish shart emas.
Nimani mustahkamlaydi: 2.6 (Zen) va 2.9 (pythonik kod).
Xulosa
Bu darsda Pythonning kelib chiqishi va falsafasini ko'rdik.
Eng muhim uch fikr:
Python tasodifiy emas — u falsafaga qurilgan. Bo'sh joy bilan bloklash, avtomatik tur aylantirishning yo'qligi, "bitta ravshan yo'l" — bularning har biri ongli qaror.
ABC dan olingan asosiy saboq — kengaytiriladigan bo'lish. Aynan C bilan integratsiya imkoniyati
numpy,pandas,PyTorchni mumkin qildi va Pythonni bugungi holatga olib keldi.Pythonik kod — qisqa kod emas, ravshan kod. "Qanday qilish" o'rniga "nima kerak" ni yozing.
Keyingi darsda Python real dunyoda qayerda ishlatilishini ko'ramiz — Instagram'dan NASA'gacha, aniq misollar bilan.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!