Modullar bilan tanishish
Dasturimiz kattalashib borgani sari, u ko'plab qatorlardagi kodni o'z ichiga olishi mumkin. Hamma narsani bitta faylga joylashtirish o'rniga, kodlarni ularning vazifasiga qarab alohida fayllarga ajratish uchun modullardan foydalanishimiz mumkin. Bu kodimizni tartibli va parvarish qilish osonroq qiladi.
Modul — muayyan vazifani bajaruvchi kodni o'z ichiga olgan fayl. Modul o'zgaruvchilar, funksiyalar, klasslar va h.k.ni o'z ichiga olishi mumkin. Keling, bir misolni ko'ramiz,
Keling, modul yarataylik. Quyidagini yozib, example.py nomi bilan saqlang.
# Python Module addition
def add(a, b):
result = a + b
return result
Bu yerda biz example nomli modul ichida add() funksiyasini aniqladik. Funksiya ikkita sonni oladi va ularning yig'indisini qaytaradi.
Modul ichidagi e'lonlarni boshqa modulga yoki Pythonning interaktiv interpretatoriga import qilishimiz mumkin.
Buning uchun import kalit so'zidan foydalanamiz. Avval aniqlagan example modulimizni import qilish uchun, Python promptida quyidagini yozamiz.
import example
Bu example ichida aniqlangan funksiyalarning nomlarini to'g'ridan-to'g'ri joriy belgilar jadvaliga (symbol table) import qilmaydi. U faqat example modul nomini u yerga import qiladi.
Modul nomidan foydalanib, funksiyaga nuqta . operatori orqali murojaat qilishimiz mumkin. Masalan:
example.add(4,5) # 9 ni qaytaradi
Eslatma:
Python standart kutubxonasi 200 dan ortiq modulni o'z ichiga oladi. Biz ehtiyojimizga qarab modulni import qilishimiz mumkin.
Aytaylik, biz pi qiymatini olishni xohlaymiz, avval math modulini import qilamiz va math.pidan foydalanamiz. Masalan,
# standart math modulini import qilish
import math
# pi qiymatini olish uchun math.pi'dan foydalanish
print("The value of pi is", math.pi)
Natija
The value of pi is 3.141592653589793
Pythonda modulni qayta nomlab ham import qilishimiz mumkin. Masalan,
# modulni qayta nomlab import qilish
import math as m
print(m.pi)
# Natija: 3.141592653589793
Bu yerda biz math modulini m deb qayta nomladik. Bu ba'zi holatlarda yozish vaqtini tejashi mumkin.
Shuni yodda tutingki, endi bizning ko'lamimizda math nomi tanilmaydi. Shuning uchun math.pi yaroqsiz, m.pi esa to'g'ri implementatsiya.
Modulni butunlay import qilmasdan, undan muayyan nomlarni import qilishimiz mumkin. Masalan,
# math modulidan faqat pi'ni import qilish
from math import pi
print(pi)
# Natija: 3.141592653589793
Bu yerda biz math modulidan faqat pi atributini import qildik.
Pythonda quyidagi konstruksiya yordamida moduldagi barcha nomlarni (e'lonlarni) import qilishimiz mumkin:
# standart math modulidan barcha nomlarni import qilish
from math import *
print("The value of pi is", pi)
Bu yerda biz math modulidagi barcha e'lonlarni import qildik. Bunga pastki chiziq (_) bilan boshlanadiganlardan (private e'lonlar) tashqari, bizning ko'lamimizda ko'rinadigan barcha nomlar kiradi.
Hamma narsani yulduzcha (*) belgisi bilan import qilish yaxshi dasturlash amaliyoti hisoblanmaydi. Bu identifikator uchun takroriy e'lonlarga olib kelishi mumkin. Bu shuningdek kodimizning o'qilishini ham qiyinlashtiradi.
Pythonda modul ichidagi barcha funksiya nomlarini ro'yxatlash uchun dir() funksiyasidan foydalanishimiz mumkin.
Masalan, ilgari biz example modulida add() funksiyasini aniqlagan edik.
example modulida dirdan quyidagicha foydalanishimiz mumkin:
print(dir(example))
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']
Bu yerda biz nomlarning saralangan ro'yxatini (add bilan birga) ko'rishimiz mumkin. Pastki chiziq bilan boshlanadigan boshqa barcha nomlar modul bilan bog'liq standart Python atributlari (foydalanuvchi belgilagan emas).
Masalan, __name__ atributi modulning nomini o'z ichiga oladi.
import example
example.__name__
# Natija: 'example'
Joriy nom maydonimizda (namespace) aniqlangan barcha nomlarni hech qanday argumentsiz dir() funksiyasi yordamida bilib olish mumkin.
a = 1
b = "hello"
import math
print(dir())
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']