Skip to content

Python'da modullar

Kirish

Modul - bir xil takrorlanadigan va ko'p foydalaniladigan kod qismlarini alohida fayl yoki katolog'ga joylashtirish.

Funksiyalar bir xil takrorlanadigan kod qismlarni bir guruh qilib yozish vazifasida foydalanilsa modullar bir xil takrorlanadigan funksiylarni alohida .py faylga joylash deb tushunsak bo'ladi. Biz matemetik funksiyalarni o'ganish davomida import kalit so'zi yordamida matematik modulni dasturimizga foydalanish uchun qo'shgandik. Biz import qilganimizda oldindan yozib qo'yilgan Python fayldan tayyor funksiyalarni import qilganmiz. Matematik modul yozilgan fayl yoki katalogda ko'plab tayyor funksiyalar oldindan yozib qo'yilgan. Agar oldindan yozib qo'yilmasa biz o'zimiz yozishimizga to'g'ri keladi, xuddi velospedni qayta ixtiro qilgan kabi.

Info

Modullarni qisqa qilib kutubxona deyish ham mumkin. Boshqa manbalarda kutubxona, library deb ham o'rganishingiz mumkin.

Modullar bilan ishlashdan oldin qisqa takrorlash qilib olsak yaxshi bo'ladi deb o'ylayman.

Matematik moduldan foydalanish

1-misol

import math
print(math.sqrt(9)) # kvadrat ildiz.

Natija:

3.0

Yuqoridagi misolda math deb nomalngan modul ichida joylashgan sqrt funksiyasidan foydalandik. math ichida joylashgan barcha funksiyalarga nuqta bilan murojaat qilinadi. Import qilishni boshqa usuli ham mavjud bu usul bilan butun boshli modul emas modul ichidan bizga kerak ayni bir funksiya import qilinib dasdturga qo'shiladi.

2-misol

from math import sqrt
print(sqrt(9)) # kvadrat ildiz.

Natija:

3.0

from kalit so'zidan keyin qaysi moduldan, importdan keyin esa qaysi funksiyani olmoqchiligimizni ko'rsatamiz. Quyida bir qancha misollar ko'rib chiqamiz.

3-misol

from math import pow
print(pow(3, 2)) # darajaga oshirish.

Natija:

9.0

4-misol

import math
print(math.pow(3, 2)) # darajaga oshirish.

Natija:

9.0

O'zimizni modul(kutubxona)mizni yozamiz.

Misol tariqasida matematikada kerak bo'ladigan ba'zi formulalarni kichik modul ko'rinishida yozib ko'ramiz.

Birinchi reja tuzib olsak maqsadga muvofiq bo'ladi.

  1. Birinchi biz dasturlamoqchi bo'lgan formulalarni ro'yxatini aniqkaymiz.
    • Uchburchak yuzini hisoblash
    • To'rtburchak yuzini hisoblash
    • Kvadrat yuzini hisoblash
    • Doira yuzini hisoblash
  2. Modul uchun nom tanlashimiz kerak. Modulizmi uchun matematika nomi to'g'ri keladi.

  3. Fayl strukturasi. Modulimizni matematika.py faylda saqlaymiz.

  4. Formulalarimiz uchun nomlar. Formulalarni hisob kitoblarini qilishimiz uchun har bir formulaga alohida funksiya yozishimiz kerak bo'ladi. Funksiyalarga hozircha o'zbek tilida nom beramiz. Lekin ingliz tilida nom berish tavfsiya qilinadi.

    • Uchburchak yuzi: uchburchak_yuzi
    • To'rtburchak yuzini hisoblash: t_yuzi
    • Kvadrat yuzini hisoblash: k_yuzi
    • Doira yuzini hisoblash: d_yuzi

Nimalar qilish keraklgini aniqlab oldik endi ishni boshlasak ham bo'ladi.

Birinchi navbatda matematika.py faylini yaratib olamiz va quyidagicha ma'lumotlarni kiritamiz.

matematika.py
"""
Muallif: Farrux Elomonov
Sana: 19.10.2024
Fayl haqida: Ushbu dastur Python'da modullar mavzusi uchun yozildi.
"""

def uchburchak_yuzi():
    """Uchburchak yuzini hisoblash uchun"""
    pass


def t_yuzi():
    """To'rtburchak yuzini hisoblash uchun"""
    pass


def k_yuzi():
    """Kvadrat yuzini hisoblash uchun"""
    pass

def d_yuzi():
    """Doira yuzini hisoblash uchun"""
    pass

Python modulimizni tuzolmasini aniqlab oldik endi mantiqiy qismlarni yozishni boshlasak ham bo'ladi.

Uchburchakning yuzasi S = hb / 2 formula bilan aniqlanadi. h - tomonga tushurilgan balandlik, b - uchburchaking tomoni. Demak funksiyamizda ikkita argument bo'lishi kerak. Balandlik va tominni bersak bizga yuzani natijasini bizga qaytariladi.

def uchburchak_yuzi(h, b):
    """Uchburchak yuzini hisoblash uchun"""
    s = b * h / 2
    return s

Yoki:

def uchburchak_yuzi(h, b):
    """Uchburchak yuzini hisoblash uchun"""
    return b * h / 2

To'rtburchak yuzini hisoblash formulasi S = a * b formula bilan aniqlanadi. a va b to'rtburchak tomonlari.

def t_yuzi(a, b):
    """To'rtburchak yuzini hisoblash  uchun"""
    s = a * b
    return s

Yoki:

def t_yuzi(a, b):
    """To'rtburchak yuzini hisoblash uchun"""
    return a * b

Kvadrat yuzini hisoblash formulasi S = a^2. a - kvadrat tomoni.

def k_yuzi(a):
    """Kvadrat yuzini hisoblash uchun"""
    s = a ** 2
    return s

Yoki:

def k_yuzi(a):
    """Kvadrat yuzini hisoblash uchun"""
    s = a * a
    return s

Yoki:

def k_yuzi(a):
    """Kvadrat yuzini hisoblash uchun"""
    return a * a

Doira yuzini hisoblash formulasi S = PI * R^2. R = aylana radiusi PI = 3.14.

def d_yuzi(r):
    """Doira yuzini hisoblash uchun"""
    PI = 3.14
    s = r * PI
    return s

Yoki:

def d_yuzi(r):
    """Doira yuzini hisoblash uchun"""
    PI = 3.14
    return r * PI

Yoki:

import math # PI ni qiymatini matematik kutubxonadan olish uchun

def d_yuzi(r):
    """Doira yuzini hisoblash uchun"""
    return r * math.pi

Biz barcha kerak mantiqlarni yozib oldik matematika.py fayli'ni to'liq ko'rinishi quyidagicha bo'ladi.

matematika.py
"""
Muallif: Farrux Elomonov
Sana: 19.10.2024
Fayl haqida: Ushbu dastur Python'da modullar mavzusi uchun yozildi.
"""

def uchburchak_yuzi(h, b):
    """Uchburchak yuzini hisoblash uchun"""
    return b * h / 2


def t_yuzi(a, b):
    """To'rtburchak yuzini hisoblash uchun"""
    return a * b


def k_yuzi(a):
    """Kvadrat yuzini hisoblash uchun"""
    return a * a

def d_yuzi(r):
    """Doira yuzini hisoblash uchun"""
    PI = 3.14
    return r * PI

Mantiqiy qismlarni yozishda eng qisqa usullar tanlab olindi, siz o'zingiz boshqa usullarni sinab ko'rishingiz mumkin.

matematika.py faylizmi tayyor bo'ldi endi shu faylda yozilgan funksiyalardan qanday foydalanishni ko'ramiz. Buning uchun boshqa hisobla.py faylini yaratib olamiz va matematika.py faylini import qilib qo'shamiz.

hisobla.py
import matematika

Endi funksiyalarimizdan foydalansak bo'ladi.

hisobla.py
1
2
3
4
5
6
import matematika

print(matematika.uchburchak_yuzi(2, 4))
print(matematika.t_yuzi(2, 4))
print(matematika.k_yuzi(2))
print(matematika.d_yuzi(2))

Natija:

4.0
8
4
6.283185307179586

Agar sizda ham shunday natija chiqgan bo'lsa tabriklayman! Agar natija olmagan bo'lsangiz tepaga qaytib qaytadan o'qib chiqishni tavsiya qilgan bo'lardim :).

Import qilishni ikkinchi usulini ham o'rgangan edik ya'ni nuqta bilan murojaat qilish emas aynan bizga kerakli funksiyani import qilish bunda biz from kalit so'zudan foydalanar edik. Quyida bunga ham misol ko'rsamiz.

hisobla.py
1
2
3
4
5
6
from matematika import uchburchak_yuzi, k_yuzi, t_yuzi, d_yuzi

print(uchburchak_yuzi(2, 4))
print(t_yuzi(2, 4))
print(k_yuzi(2))
print(d_yuzi(2))

Natija:

4.0
8
4
6.283185307179586

Virgul(,) bilan bitta modul ichida joylashgan bir nechta funksiyalarni ketma-ket chaqirishimiz mumkin.

Kutubxonani import qilish davomida unga yangi nom ham berish mumkin bu bilan siz foydalanish davomida qulayroq yoki uzun nomli kutubxona yoki funksiyani qisqasiga o'zgartirishingiz mumkin. Buning uchun bizga as yordam beradi. as kalit so'zini import qilingan kutubxona yoki funksiyadan keyin yozasiz, as dan keyin esa yangi yozasiz.

hisobla.py
1
2
3
4
5
6
import matematika as m

print(m.uchburchak_yuzi(2, 4))
print(m.t_yuzi(2, 4))
print(m.k_yuzi(2))
print(m.d_yuzi(2))

Natija:

4.0
8
4
6.283185307179586

as dan foydalanish sizga faqat yangi nom berish uchun emas ba'zi hollarda bir xil nomli funksiya ikkita modul ichida bo'ladi agar ikkalasidan bitta py faylda foydalanaman desangiz mantiqiy xato kelib chiqadi. Shunday holatlarda as dan foydalanib ikki xil noma beriladi va xatolik oldi olinadi.

Info

package - bir qancha modullar jamlanmasi hisobanadi.

PIP haqida.

PIP - Python dasturlash uchun mo'ljalangan paket(package)lar yoki modullar boshqaruvchisi hisoblanadi. Agarda sizda Python 3.4 dan yuqori versiya bo'lsa sizning kompyuteringizga allaqchon o'rnatilgan bo'ladi. PIP bizga tasharidan qo'shimcha packagelarning o'rnatish va ularni boshqarishga yordam beradi. Tashqaridagi package'lar nima degan o'rinli savol sizda tug'ilihis mumkin.

Info

Tashqi package'lar oldin biror muammo uchun yozib qo'yilgan modullar jamlanmasi hisoblanadi. Package'lar https://pypi.org serverlariga joylangan bo'ladi, PIP shu serverlardan biz so'ragan package'ni o'rnatib beradi.

PIP ni tekshirish

Termenalga quyidagi buruqni yozing va enter tugmasini bosing:

pip

Natija:

Agar Python kompyuteringga to'g'ri o'rnatilgan bo'lsa PIP ga tegishli buyruqlar haqida ma'lumot termenalda paydo bo'ladi.

Tashqi package o'rnatish

PIP bilan tashqi package o'rnatish uchun quyidagi buyruqni termenalga yozish kerak bo'ladi.

pip install package_nomi

package_nomi nomini https://pypi.org saytidan olishingiz yoki sizga kerak bo'lgan package hujjatlaridan olishingiz kerak.

Misol tariqasida Matplotlib package ni o'rnatib ko'ramiz bu package statistik gariflar chizish uchun qo'llaniladi.

matplotlib.png

Rasm ko'rib turganigizdek pip bilan qanday o'rnatish burug'i ham ko'rsatilgan(https://pypi.org/project/matplotlib/). Shu buruqni ishga tushiramiz.

pip install matplotlib

Endi yuqorida o'rnatgan package'mizdan foydalanib ko'ramiz.

import matplotlib
print(matplotlib.__version__) # package versiyasini chop qiladi.

Natija:

3.9.2

Agar sizga package'ni o'chirish kerak bo'lsa uninstall dan foydalanshingiz mumkin.

pip uninstall matplotlib

Ushbu buyruqni ishga tushurgangizidan so'ng sizdan tasdiqlashingizni so'raydi siz Y bilan tasdiqlaysiz va package o'chadi. Endi yuqoridagi kodimizni qayta ishga tushursak quyidagi natijani olamiz.

import matplotlib
print(matplotlib.__version__) # package versiyasini chop qiladi.

Natija:

ModuleNotFoundError: No module named 'matplotlib'

matplotlib package'i mavjud emasligi haqida xatolik xabarini olamiz.

__init__.py haqida

Pythonda __init__.py fayl katalogni Python package'i sifatida belgilash uchun xizmat qiladi. U import qilinganda packageni ishga tushirish uchun ishlatiladi. __init__.py package import qilinganda birinchi ishga tushadi, unda o'zgaruvchilar, package versiyasi kabi ma'lumotlarni saqlash mumkin. Agar sizni package'ingiz import qilinganda ishga tushishi kerak bo'lgan mantiqiy amallar bo'lsa bu aynan siz uchun mos keladi.

Misol uchun sizda matematika deb nomlangan package bor, uning ichida funksiyalarni o'zida jamlagan amallar.py fayli mavjud.

Info

Siz ham matematika deb nomlangan katalog oching va uning ichida amallar.py fayli bo'lsin.

Katalok tuzilmasi

├── matematika
│   ├── amallar.py
├──hisobla.py
amallar.py
"""
Muallif: Farrux Elomonov
Sana: 19.10.2024
Fayl haqida: Ushbu dastur Python'da modullar mavzusi uchun yozildi.
"""

def uchburchak_yuzi(h, b):
    """Uchburchak yuzini hisoblash uchun"""
    return b * h / 2


def t_yuzi(a, b):
    """To'rtburchak yuzini hisoblash uchun"""
    return a * b


def k_yuzi(a):
    """Kvadrat yuzini hisoblash uchun"""
    return a * a

def d_yuzi(r):
    """Doira yuzini hisoblash uchun"""
    PI = 3.14
    return r * PI

Endi esa hisobla.py da shu packagedan foydalanib ko'ramiz.

from matematika.amallar import k_yuzi
print(k_yuzi(4))

Natija:

16

Yuqorida matematika nomli package ichida joylashgan amallar nomli modulining ichida joylashgan k_yuzi nomli funksiyani import qildik va foydalandik.

__init__.py ning kuchi

Yuqoridagi misol bilan davom etamiz endi matematika katalogi ichida __init__.py faylini yaratib olamiz:

├── matematika
│   ├── __init__.py
│   ├── amallar.py

Yaratib olingan __init__.py fayl ichiga quyidagini yozing:

__init__.py
print('__init__.py ishga tushdi')

Yuqoridagi misolimizni yana qayta ishga tushiramiz:

from matematika.amallar import k_yuzi
print(k_yuzi(4))

Natija:

__init__.py ishga tushdi
16

Yana ham aniqro tushunish uchun quyidagicha o'zgartirish kiritamiz:

from matematika.amallar import k_yuzi

Natija:

__init__.py ishga tushdi

Nimani tushundingiz? Agar tushunmagan bo'lsangiz __init__.py qismini boshidan qayta o'qing.

Yuqoridagi misolda __init__.py qoidasig asosan package import bo'lganida __init__.py ishga tushdi. Package'imizdan foydalanish yana ham qulay bo'lishi uchun quyidagicha o'zgartirish kiritamiz.

__init__.py
print('__init__.py ishga tushdi')
from . amallar import k_yuzi, d_yuzi, t_yuzi, uchburchak_yuzi

Va

hisobla.py
from matematika import k_yuzi
print(k_yuzi(4))

Natija:

__init__.py ishga tushdi
16

Biz importlarni __init__.py ichida amalga oshirdik natijada package import bo'lgan vaqtda init.py ishga tushadi va amallar.py ichida mavjud funksiyalar barchasi import bo'ladi.

Importda nuqat(.)dan foydalanish

E'tibor bergan bo'lsangiz __init__.py ichida amallar.py dan funksiyalarni import qilishda . dan foydalandik, bu nuqta joriy katalogni bidiradi. Ya'ni __init__.py bilan amallar.py bir joyda shu yerdan import qil deb Python'ga aytilganidek.

Barchasini import qilish

Shunday holatlar bo'ladi har bir funksiya nomini yozib o'tirmasdan barchasini import qilish kerak bunday holatlar uchun * dan foydalanish kerak bo'ladi. Yuqoridagi misolimiz bilan tushinshga harakat qilamiz.

__init__.py faylda importlarni quyidagicha o'zgartiramiz:

__init__.py
print('__init__.py ishga tushdi')
from . amallar import *

Shu bilan amallar.py dagi barchasi import qilindi.

Info

hisobla.pyda ham shu ishni amalga oshirib sinab ko'ring.