Modullar: o'z kodingizni alohida faylga ajratish
Bu bobda
- o'z modulingizni (
.pyfayl) yozib, uniimportqilishni import,from ... import,asfarqiniif __name__ == "__main__":nima uchun kerakligini- Jupyterda modulni o'zgartirganda nima bo'lishini
- standart kutubxonadan foydali modullarni:
datetime,os,random - tashqi kutubxonani
pipbilan o'rnatishni
Modul — oddiy .py fayl
4-bobda import math qildik. math — Python bilan keladigan modul. O'zimiz ham modul yasay olamiz: istalgan .py fayl — modul.
Jupyterda fayl yaratishning eng oson yo'li — katak boshida %%writefile fayl_nomi.py. Katak ishga tushganda, uning ichidagi matn shu nomli faylga yoziladi va daftar turgan papkada paydo bo'ladi.
Fayl: hisob.py
"""Talabalar ballari bilan ishlaydigan yordamchi funksiyalar.""" MAKS_BALL = 100 def baho(ball): if ball >= 86: return 5 if ball >= 71: return 4 if ball >= 56: return 3 return 2 def ortacha(ballar): return sum(ballar) / len(ballar) if ballar else 0
Endi boshqa katakda (yoki boshqa faylda) shu modulni ulaymiz. Fayl nomi .py siz yoziladi:
import hisob print(hisob.baho(92)) print(hisob.ortacha([78, 91, 85])) print(hisob.MAKS_BALL)
5 84.66666666666667 100
Modul ichidagi hamma narsa — funksiyalar, o'zgaruvchilar — modul.nom orqali olinadi.
import ning to'rt shakli
import hisob from hisob import baho from hisob import ortacha as ort import hisob as h print(hisob.baho(75), baho(75), ort([4, 5]), h.MAKS_BALL)
4 4 4.5 100
| Yozuv | Chaqirish | Qachon |
|---|---|---|
import hisob |
hisob.baho() |
eng aniq: nom qayerdan kelgani ko'rinadi |
from hisob import baho |
baho() |
bir-ikki funksiya tez-tez kerak bo'lsa |
from hisob import ortacha as ort |
ort() |
nom uzun yoki boshqa nom bilan to'qnashsa |
import hisob as h |
h.baho() |
an'anaviy qisqartmalar: import pandas as pd, import numpy as np |
from modul import * ham bor (4-bob), lekin u qaysi nomlar kirib kelganini yashiradi — o'z kodingizda ishlatmang.
Nega modulga ajratish kerak?
- Tartib. 500 qatorli bitta fayl o'rniga — mavzu bo'yicha bir nechta kichik fayl.
- Qayta ishlatish.
hisob.pyni keyingi loyihaga ko'chirasiz va darhol ishlatasiz. - Jamoaviy ish. Har kim o'z faylida ishlaydi.
if __name__ == "__main__"
Ko'pincha modul faylining oxirida uni sinab ko'rish kodi bo'ladi. Muammo: import qilganda bu kod ham ishlab ketadi:
Fayl: salomlar.py
def salom(ism): return f"Salom, {ism}!" print("Sinov:", salom("Ali"))
import salomlar print(salomlar.salom("Sarvinoz"))
Sinov: Salom, Ali! Salom, Sarvinoz!
import qilganimizda "Sinov" qatori ham chiqdi — biz buni so'ramagan edik. Yechim: sinov kodini if __name__ == "__main__": ichiga olish:
Fayl: salomlar2.py
def salom(ism): return f"Salom, {ism}!" if __name__ == "__main__": print("Sinov:", salom("Ali"))
import salomlar2 print(salomlar2.salom("Sarvinoz"))
Salom, Sarvinoz!
__name__ — Python har bir faylga beradigan maxsus o'zgaruvchi. Fayl to'g'ridan-to'g'ri ishga tushirilsa (python salomlar2.py), u "__main__" bo'ladi; import qilinsa — modul nomi ("salomlar2"). Shuning uchun sinov kodi faqat birinchi holatda ishlaydi.
Jupyterda modulni o'zgartirdim, lekin hech narsa o'zgarmadi
Python modulni birinchi import da yuklaydi va keyingi import larda xotiradagi nusxani beradi. Faylni o'zgartirib, yana import hisob qilsangiz — eski versiya ishlayveradi.
Yechimlar:
- Kernel → Restart va kataklarni qaytadan ishga tushirish (eng ishonchli);
- yoki importlib.reload:
import importlib importlib.reload(hisob)
Modulga standart modul nomini berish
Faylingizni math.py, random.py yoki json.py deb nomlasangiz, Python o'z modulini emas, sizning faylingizni oladi va import random keyin random.randint ni topa olmaydi. O'z fayllaringizga o'ziga xos nom bering: hisob.py, oyin_random.py.
Standart kutubxonadan foydali modullar
Python bilan birga yuzlab modul keladi ("batteries included"). Eng ko'p kerak bo'ladiganlaridan uchtasi:
datetime: sana va vaqt
from datetime import date, datetime, timedelta bugun = date(2026, 10, 14) print(bugun) print(bugun.year, bugun.month, bugun.day) print(bugun + timedelta(days=21)) tugilgan = date(2002, 10, 27) print((bugun - tugilgan).days, "kun yashadingiz") vaqt = datetime(2026, 10, 14, 18, 30) print(vaqt.strftime("%d.%m.%Y %H:%M"))
2026-10-14 2026 10 14 2026-11-04 8753 kun yashadingiz 14.10.2026 18:30
Kitobda sanani qo'lda berdik, natija har safar bir xil bo'lishi uchun. O'zingizda date.today() va datetime.now() bilan hozirgi sanani oling.
strftime belgilari: %d kun, %m oy, %Y yil, %H soat, %M daqiqa.
os va pathlib: fayllar va papkalar
import os from pathlib import Path print(os.path.exists("hisob.py")) print(os.path.exists("yoq_fayl.py")) for fayl in sorted(Path(".").glob("*.py")): print(fayl.name)
True False hisob.py salomlar.py salomlar2.py
glob("*.py") — joriy papkadagi .py bilan tugaydigan hamma fayllar. 19-bobda fayllar bilan ko'proq ishlaymiz.
random: yana bir bor
4-bobda randint va choice ni ko'rdik. Yana ikkitasi:
import random random.seed(1) savollar = ["1-savol", "2-savol", "3-savol", "4-savol", "5-savol"] random.shuffle(savollar) print(savollar) print(random.sample(range(1, 50), 6))
['3-savol', '4-savol', '5-savol', '1-savol', '2-savol'] [32, 29, 31, 42, 25, 14]
shuffle — ro'yxatni joyida aralashtiradi (test savollari uchun), sample — takrorsiz tasodifiy tanlov (lotereya uchun).
Tashqi kutubxonalar: pip
Standart kutubxonada yo'q narsalar — dunyo bo'ylab dasturchilar yozgan yuz minglab paketlar — pip bilan o'rnatiladi. Jupyterda katakda:
%pip install requests
Terminalda esa pip install requests. O'rnatilgandan keyin oddiy import requests qilinadi. AI muhandisligi yo'lida eng ko'p o'rnatadiganlaringiz: numpy, pandas, matplotlib, scikit-learn, torch.
Qaysi paketlar o'rnatilgan?
%pip list — hammasi, %pip show pandas — bitta paket haqida. Paketni faqat ishonchli manbadan (rasmiy nomi bilan) o'rnating: nomi bitta harfga farq qiladigan soxta paketlar ham uchraydi.
Kitoblarda
- Python asoslari: modullardan foydalanish 72–74-betlar, maxsus modullar 75–80-betlar, sana va vaqt (
datetime) 81–82-betlar. - Python Crash Course: 8-bob, Storing Your Functions in Modules 150–153-betlar (
import,from,as,*).
Xulosa
- Har bir
.pyfayl — modul;import fayl_nomi(.pysiz). import m→m.f();from m import f→f();as— boshqa nom.- Sinov kodi —
if __name__ == "__main__":ichida. - Jupyterda modul o'zgarsa — Kernel → Restart yoki
importlib.reload. - Faylga
random.py,math.pykabi standart nomlarni bermang. datetime— sanalar,pathlib— fayllar,random— tasodif; tashqi paketlar —%pip install.
Mashqlar
Bu mashqlarda yechim katagi ichida funksiyani yozing; modul yaratish mashqlari pastdagi "Mustaqil ish" bo'limida.
Sana kun.oy.yil ko'rinishida berilgan, masalan 14.10.2026. Shu sanadan N kun keyingi sanani xuddi shu ko'rinishda chiqaring (kun va oy ikki xonali). datetime dan foydalaning.
| Kirish | Kutilgan natija |
|---|---|
| 14.10.2026, 21 | 04.11.2026 |
| 28.02.2024, 1 | 29.02.2024 |
| 31.12.2026, 1 | 01.01.2027 |
Yechimni ko'rish
from datetime import date, timedelta k, o, y = input().split(".") d = date(int(y), int(o), int(k)) + timedelta(days=int(input())) print(d.strftime("%d.%m.%Y"))
Ikki sana kun.oy.yil ko'rinishida ikki qatorda berilgan. Ular orasida necha kun borligini chiqaring (musbat son).
| Kirish | Kutilgan natija |
|---|---|
| 01.09.2026, 14.10.2026 | 43 |
| 14.10.2026, 01.09.2026 | 43 |
| 01.01.2024, 01.01.2025 | 366 |
Yechimni ko'rish
from datetime import date def sana(matn): k, o, y = matn.split(".") return date(int(y), int(o), int(k)) print(abs((sana(input()) - sana(input())).days))
Tug'ilgan sana kun.oy.yil va bugungi sana berilgan. Odamning to'liq yoshini chiqaring (bu yil tug'ilgan kuni hali kelmagan bo'lsa, bir yil kam).
| Kirish | Kutilgan natija |
|---|---|
| 27.10.2002, 14.10.2026 | 23 |
| 14.10.2002, 14.10.2026 | 24 |
| 01.01.2000, 31.12.2025 | 25 |
Yechimni ko'rish
from datetime import date def sana(matn): k, o, y = matn.split(".") return date(int(y), int(o), int(k)) t = sana(input()) b = sana(input()) yosh = b.year - t.year if (b.month, b.day) < (t.month, t.day): yosh -= 1 print(yosh)
Mustaqil ish: o'z modulingiz
Tekshiruvchisiz, lekin muhim mashq:
%%writefile geometriya.pybilan modul yarating. Ichida:PI = 3.141592653589793,doira_yuzi(r),aylana_uzunligi(r),masofa(x1, y1, x2, y2),uchburchak_yuzi(a, b, c)(Geron formulasi, 4-bob Begin21).- Fayl oxiriga
if __name__ == "__main__":ichida har bir funksiyani bitta misol bilan sinang. - Yangi katakda
import geometriya as gqiling va 4-bobdagi Begin12, Begin20, Begin21 mashqlarini shu modul funksiyalari bilan qayta yeching. - Modulga xato qo'shib (masalan
doira_yuzidar ** 3), qaytaimportqiling — natija o'zgarmaganini ko'ring. Keyinimportlib.reload(g)qiling.
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.