#23 MODULLAR
Dasturni modullarga bo'lishni o'rganamiz
Last updated
Dasturni modullarga bo'lishni o'rganamiz
Last updated
Funksiyaning qulayliklaridan biri, ko'p takrorlanadigan kodlarni funksiya ichida yashirishimiz va kerak bo'lgan murojat qilishimiz mumkinligida. Maqsadimiz dasturimizni ixcham va tushunarli qilib, kelajakda o'zimiz yoki boshqalar uchun ham "toza" kod qoldrisih. Bu yo'nalishda yana bir qadam qo'yib, dasturimizni modullarga ajratimshimiz mumkin.
Modul bu loyihamiz ichidagi alohida fayl bo'lib, dasturimiz davomida ishlatiladigan funskyalarni (va o'zgaruvchilarni) mana shu faylga joylab, ko'zdan yashirib qo'yishimiz mumkin. Bu bizga asosiy dasturimizdan chalg'imasdan kod yozish imkoniyatini beradi.
Modul va uning ichidagi funksiyalarni istalgan payt asosiy dasturimizga yuklab olishimiz, modullarni boshqa dasturchilar bilan ulashishimiz yoki kelajakda o'zimizning boshqa loyihalarimizda foydalanishimiz mumkin.
Umuman olganda katta dasturlar bir nech o'nlab modullardan iborat bo'lishi tabiiy hol.
Modul yaratish uchun asosiy dasturimizdagi funksiyalarni yangi faylga ko'chiramiz xolos. Modulga oson murojat qilishimiz uchun, faylimiz asosiy dasturimiz bilan bitta papkada bo'lgani afzal. Bunda adashib ketmaslik uchun, loyihangizning (dasturning) asosiy faylini main.py
deb nomlash o'rinli.
Keling, biz ham avto_info_mod.py
degan fayl yaratamiz va ichiga quyidagi 3 ta funksiyalarni joylaymiz:
Yuqoridagi funksiyalarga asosiy dasturdan murojat qlishning bir necha usuli bor.
Modul ichidagi istalgan funksiyaga murojat qilish uchun import modul_nomi
komandasidan foydalanamiz. Bunda modul ichidagi istalgan funksiyaga modul_nomi.funksiya_nomi()
ko'rinishida murojat qilishimiz mumkin. Ya'ni avval modul nomi undan keyin esa nuqta qo'yilib, modul ichidagi funksiya nomi yoziladi.
Keling, yuqoridagi modulimizdagi avto_info()
va info_print()
funksiyalariga murojat qilamiz:
Natija: Qora GM MALIBU, avtomat korobka, 2020-yil, 40000$
Ko'rib turganingizdek, dasturimiz qisqa, tushunarli va muhimi toza bo'ldi. 3 qator kod ortida 20 qatordan ortiq kodni yashirdik.
import
modul_nomi
komandasi bir martta, dastur boshida yoziladi.
Yuqoridagi usul bilan modulni chaqirib olishda fayl nomi uzun bo'lsa bu o'ziga yarasha noqulayliklar tug'dirishi mumkin. Buning oldini olish uchun esa, modulni chaqirganda unga as
operatori yordamida qisqa nom berishimiz, va modulga qisqa nom orqali murojat qilish mumkin. Quyidagi misolda avto_info_mod
ni qisqa qilib aim
deb nomlab oldik, va 3-4-qatorlarda modulga murojat qilishda qisqa nomidan foydalandik.
Modulga qisqa nom berganingizda bunday nomli boshqa o'zgaruvchi yoki funksiya yo'qligiga amin boling. Shunigdek, dastur davomida bu nomni boshqa o'zgaruvchilarga yoki funksiylarga berib yubormang.
Agar katta modullardan faqatgina ba'zi funksiyalarga murojat qilish talab qilinisa, kerakli funksiyalarni from
modul_nomi
import
funksiya1, funksiya2
komandasi yordamida o'zimizning dasturimizga ko'chirib olishimiz mumkin. Bu usulning qulayligi, endi funksiyalarga to'g'ridan-to'g'ri murojat qilish mumkin (modul ismini yozmagan holda).
Misol uchun avvalgi kodimizda biz faqatgina avto_info
va info_print
funksiyalaridan foydalandik. Shu funksiyalarni asosiy kodimizga ko'chirib olaylik:
Huddi avvalgidek, ko'chrib olgan funksiyamizga ham qisqa nom berishimiz mumkin.
Modul ichidagi barcha funksiyalarni asosiy dasturga ko'chirib olish uchun from modul_nomi import *
komandasidan foydalanamiz.
Diqqat! Bir necha sabablarga ko'ra bu usuldan foydalanish tavsiya qilinmaydi. Katta modullarda yuzlab funksiyalar bo'lishi mumkin, va funksiya nomi sizning dasturingizdagi boshqa funksiya yoki o'zgaruvchi bilan bir hil nomga ega bo'lsa, dastur xato ishlashiga olib keladi.
Modullarning ichida nafaqat funksiyalar, balki turli o'zgaruvchilarni ham saqlash mumkin. Modul ichidagi o'zgaruvchilarga ham huddi yuqoridagi usullar bilan murojat qilish mumkin.
Python dasturlash tili tayyor modullar bilan keladi, modullarning to'liq ro'yxatini quyidagi bo'glama orqali kirib ko'rishingiz mumkin:
Keling ulardan ba'zilari bilan tanishamiz.
math
MODULIBu modulda matematik hisob kitoblarni bajaruvchi funksiyalar va o'zgaruvchilar joylashgan. Keling ularga ba'zi misollarni ko'ramiz.
sqrt()
- qavs ichida berilgan qiymatning kvadrat ildizini qaytaradiNatija: 20.0
pow(x,y)
- x ning y-darajasini qaytaradiNatija: 3125
Natija: 3.141592653589793
log2(x)
va log10(x)
- x
ning 2 va 10-lik logorifmini qaytaruvchi funksiyalarmath
ichidagi ayrim funksiyalarFunksiya
Funksiya ta'rifi
ceil(x)
x dan katta yoki teng bo'lgan eng kichik butun sonni qaytaradi
fabs(x)
x ning absolyut qiymatini qaytaradi
floor(x)
x dan kichik yoki teng bo'lgan eng yaqin butun sonni qaytaradi
exp(x)
cos(x)
sin(x)
tan(x)
degrees(x)
x burchakning radian qiymatini darajaga konvertasiya qilish
radians(x)
x burchakning daraja qiymatini radianga konvertasiya qilish
e
math
moduli ichidagi barcha funksiyalar bilan Pythonning rasmiy sahifasida tanishishingiz mumkin.
random
MODULIRandom moduli tasodifiy sonlar bilan ishlash uchun qulay funksiyalarga boy. Keing ulardan ayrimlari bilan tanishamiz.
randint(a,b)
Bu funksiya a va b oraligi'da tasodifiy butun son qaytaradi.
choice(x)
x
ning ichidan tasodifiy qiymatni qaytaruvchi funksiya. Bunda x
bir necha elementdan iborat o'zgaruvchi (matn, ro'yxat) bo'lishi kerak.
shuffle(x)
x
ichidagi elementlarni tasodifiy tartibda qaytaruvchi funksiya. Bunda x
bir necha elementdan iborat o'zgaruvchi (matn, ro'yxat) bo'lishi kerak.
random
moduli ichidagi boshqa funksiyalar haqida Python rasmiy sahifasidan ma'lumot olishingiz mumkin.
ni qaytaruvchi funksiya
ni qaytaruvchi funksiya
ni qaytaruvchi funksiya
ni qaytaruvchi funksiya
Matematik konstanta (2.71828...)