Asosiy qismga o'tish

Modullar: o'z kodingizni alohida faylga ajratish

15-bob 15 kod bloki 1573 so'z

Bu bobda

  • o'z modulingizni (.py fayl) yozib, uni import qilishni
  • import, from ... import, as farqini
  • if __name__ == "__main__": nima uchun kerakligini
  • Jupyterda modulni o'zgartirganda nima bo'lishini
  • standart kutubxonadan foydali modullarni: datetime, os, random
  • tashqi kutubxonani pip bilan 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

python17 qator
"""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:

python5 qator
import hisob

print(hisob.baho(92))
print(hisob.ortacha([78, 91, 85]))
print(hisob.MAKS_BALL)
Natija
5
84.66666666666667
100

Modul ichidagi hamma narsa — funksiyalar, o'zgaruvchilar — modul.nom orqali olinadi.

import ning to'rt shakli

python6 qator
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)
Natija
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.py ni 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

python5 qator
def salom(ism):
    return f"Salom, {ism}!"


print("Sinov:", salom("Ali"))
python2 qator
import salomlar
print(salomlar.salom("Sarvinoz"))
Natija
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

python6 qator
def salom(ism):
    return f"Salom, {ism}!"


if __name__ == "__main__":
    print("Sinov:", salom("Ali"))
python2 qator
import salomlar2
print(salomlar2.salom("Sarvinoz"))
Natija
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:

python2 qator
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

python10 qator
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"))
Natija
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

python7 qator
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)
Natija
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:

python6 qator
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))
Natija
['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:

matn1 qator
%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 .py fayl — modul; import fayl_nomi (.py siz).
  • 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.py kabi 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.

15.1

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.

KirishKutilgan natija
14.10.2026, 2104.11.2026
28.02.2024, 129.02.2024
31.12.2026, 101.01.2027
Yechimni ko'rish
python4 qator
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"))
15.2

Ikki sana kun.oy.yil ko'rinishida ikki qatorda berilgan. Ular orasida necha kun borligini chiqaring (musbat son).

KirishKutilgan natija
01.09.2026, 14.10.202643
14.10.2026, 01.09.202643
01.01.2024, 01.01.2025366
Yechimni ko'rish
python7 qator
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))
15.3

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).

KirishKutilgan natija
27.10.2002, 14.10.202623
14.10.2002, 14.10.202624
01.01.2000, 31.12.202525
Yechimni ko'rish
python12 qator
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:

  1. %%writefile geometriya.py bilan 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).
  2. Fayl oxiriga if __name__ == "__main__": ichida har bir funksiyani bitta misol bilan sinang.
  3. Yangi katakda import geometriya as g qiling va 4-bobdagi Begin12, Begin20, Begin21 mashqlarini shu modul funksiyalari bilan qayta yeching.
  4. Modulga xato qo'shib (masalan doira_yuzi da r ** 3), qayta import qiling — natija o'zgarmaganini ko'ring. Keyin importlib.reload(g) qiling.

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar