Python logo

Python dasturlash tili: 7-dars.

Modullar

Dastur kodini funksiyaga joylagan holda takror ishlatish mumkinligini ko’’rib chiqdik.  Agar bizga har xil funksiyalarimizni boshqa dasturlarimizda ishlatishga to’’g’’ri kelib qolsa, u holda nima qilamiz? Javob – modullar.

Modullar tuzishning har xil usullari mavjud bo’’lib, ularning eng oddiysi bu – funksiya va o’’zgaruvchilarni o’’z ichiga olgan .py kengaytmalik fayl xosil qilish.

Boshqa usuli – Piton interpretatori yozilgan dasturlash tilida modul yozish. Misol uchun, C dasturlash tilida modul yozish mumkin va buni kompilyatsiyadan so’’ng Pitonning standart interpretatori orqali ishlatish mumkin.

Modul funksiyalaridan foydalanish uchun uni boshqa dasturga yuklash (импортировать) mumkin. Xuddi shunday biz Pitonning standart kutubxonalarini ishlatamiz. Dastlab standart kutubxonalar modullarini qanday ishlatishni ko’’rib chiqamiz.

Misol: (using_sys.py nomi bilan saqlang)

  1. import sys
  2.  
  3. print("Buyruqlar qatori argumentlari:")
  4.  
  5. for i in sys.argv:
  6.  
  7. print(i)
  8.  
  9. print("\n\n O'zgaruvchi PythonPATH qiymati", sys.path, "\n")

Natija:

  1. $ Python3 using_sys.py biz argumentlarmiz
  2. Buyruqlar qatori argumentlari:
  3. using_sys.py
  4. biz
  5. argumentlarmiz
  6. O`zgaruvchi PYTHONPATH qiymati ['/home/user/python darslari/7-dars', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']

Bu qanday ishlaydi:

Dastlab sys modulini import buyrug’’i yordamida yuklab olamiz. Bu bilan biz Pitonga shu modulni ishlatishimizmi aytayapmiz. sys moduli Piton interpretatoriga va uning muxitiga, ya’ni tizimiga (system) tegishli funksiyalardan tashkil topgan.

Piton import sys komandasini bajarayotganda, u sys modulini qidiradi. Bu holatda sys standart modullardan biri bo’lganligi uchun, Piton uni qayerdan izlash kerakligini biladi. Agar bu kompilyatsiya qilinmagan modul, ya’ni Pitonda yozilgan modul bo’lganida edi, u holda Piton uni sys.path ko’rsatilgan kataloglardan izlagan bo’lar edi. Agar modul topilsa, undagi buyruqlar bajariladi va bu modul foydalanishga (доступным) shay holatga keladi.

sys modulidagi argv o’’zgaruvchiga murojat qilish nuqta orqali amalga oshiriladi, ya’ni sys.argv. Bunday ifodalashning afzalligi sizning dasturingizda ishlatilishi mumkin bo’lgan argv o’’zgaruvchi bilan kelishmovchilik chiqmaydi.

sys.argv qatorlar ro’’yxati hisoblanadi. U buyruqlar qatori argumentlaridan tashkil topgan ya’’ni buyruqlar qatoridan dasturga uzatilgan argumentlardan.

Biz “Piton using_sys.py biz argumentlarmiz” ni ishga tushirganimizda, Piton komandasi orqali using_sys.py modulini ishga tushiramiz va dasturga argumentlarni (biz argumentlarmiz) uzatamiz. Piton bu argumentlarni navbatdagi foydalanishlar ushun sys.argv o’’zgaruvchisiga saqlaydi.

Eslab qoling! Ishga tushirilgan script nomi sys.argv ro’’yxatida doimo birinchi argument hisoblanadi. Keltirilgan misolda “using_sys.py” sys.argv[0] element, “biz” – sys.argv[1] va “argumentlarmiz” – sys.argv[2] bo’’lib keladi. Pitonda raqamlash 0 dan boshlanadi, 1 dan emas.

sys.path modullar joylashishi mumkin bo’’lgan kataloglar nomlari ro’’yxatidan tashkil topgan. E’’tibor bering sys.path dagi birinchi qator biz dasturni ishga tushirgan katalog nomini ko’’rsatayapdi. Bu shuni anglatadiki, dastur turgan katalogdan ham modullarni to’’g’’ridan-to’’g’’ri yuklashimiz mumkin ekan.

from … import … operatori

argv o’’zgaruvchisini dasturga to’’g’’ridan-to’’g’’ri yuklash uchun hamda har doim sys.argv deb yozmaslik uchun, “from sys import argv” ifodasidan foydalanish mumkin.

sys modulida ishlatiladigan hamma nomlarni yuklash uchun “from sys import *” buyrug’’ini bajarish mumkin.

Misol:

  1. from math import *
  2.  
  3. n = int(input('Biror son kiriting: '))
  4.  
  5. print(sqrt(n))

Modul nomi – __name__

Har bir modulning o’’z nomi bor va shu modul buyruqlari o’’z modullari nomini bilishlari mumkin. Modul mustaqil dastur sifatida ishga tushiriladimi yoki boshqa dasturga yuklanadimi, shu kabi holatlarni bilish uchun bu foydali bo’ladi va har qaysi holat uchu modul o’zini qanday tutishi kerakligini boshqarishimiz mumkin bo’’ladi.

Misol: (using_name.py nomi bilan saqlang)

  1. if __name == "__main__":
  2.  
  3. print("Bu dastur to'g'ridan to'g'ri ishga tushirildi.")
  4.  
  5. else:
  6.  
  7. print("Meni boshqa modulga yuklashdi.")

Natija:

$ Python3 using_name.py

Bu dastur to’g’ridan-to’g’ri ishga tushirildi.

$ Python3

>>> import using_name

Meni boshqa modulga yuklashdi.

>>>

Har bir Piton modulda uning nomi aniqlangan – __name__ . Agar uning qiymati “__main__” bo’lsa, demak bu modul foydalanuvchi tomonidan to’’g’’ridan-to’’g’’ri ishga tushirilgan.

Shaxsiy modulimizni hosil qilish

Shaxsiy modulni hosil qilish juda ham oson. Biz buni har doim qilib keldik. Pitonda har bir dastur ham modul hisoblanadi.

Misol: (mymodule.py nomi bilan saqlang)

  1. def sayHi():
  2.  
  3. print("Bu mening modulim.")
  4.  
  5. __version__ = '0.1'
  6.  
  7. # mymodule oxiri

Yuqorida oddiy modul ko’’rsatildi. Ko’’rinib turibdiki, uning Pitondagi odatiy dasturlardan hech qanday farqi yo’’q.

Endi bu modulni o’’zimizning boshqa dasturlarimizda qanday ishlatishni ko’’ramiz.

Ya’na bir modul hosil qilamiz ( mymodule_demo.py nomi bilan saqlang ):

  1. import mymodule
  2.  
  3. mymodule.sayHi()
  4.  
  5. print("Versiyasi ", mymodule.__version__)

Natija:

$ Python3 mymodule_demo.py

Bu mening modulim.

Versiyasi 0.1

E’’tibor bergan bo’’lsangiz, biz modul elementlariga nuqta (.) orqali murojaat qilyapmiz. Bu Piton dasturlash tilining ya’na bir qulayligi bo’’lib, sizni ya’na va ya’na yangi usullarni o’rganishizga hojat qoldirmaydi.

from .. import .. sintaksisi bilan ishlatilgan ko’’rinishi (mymodule_demo2.py nomi bilan saqlang):

  1. from mymodule import sayhi, __version__
  2.  
  3. sayhi()
  4.  
  5. print(Versiyasi ', __version__)

mymodule_demo2.py modulining natijasi mymodule_demo.py modulining natijasi bilan bir xil. Buni o’’zingiz tekshirib ko’’rishingiz mumkin.

dir funksiyasi

dir funksiyasidan ob’yekt aniqlab keluvchi identifikatorlar ro’’yxatini olish uchun foydalansangiz bo’’ladi. Modul identifikatorlariga shu modulda aniqlangan klasslar, funksiyalar va o’’zgaruvchilar kiradi. Agar siz dir funksiyasiga biror modul nomini bersangiz, u sizga shu modulda aniqlangan nomlar ro’’yxatini beradi. Agar hech qanday argument bermasangiz, u sizga shu joriy moduldagi aniqlangan nomlar ro’’yxatini beradi.

$ Python3

>>> import sys

>>> dir(sys)

Paketlar

Shu vaqtgacha kuzatgan bo’’lsangiz, odatda o’’zgaruvchilar funksiyalarda, funksiyalar va global o’’zgaruvchilar esa modullarda joylashdi. Modullarni tashkillashtirish uchun esa paketlar ishlatiladi.

Paketlar – bu Piton modullari va maxsus __init__.py faylidan tashkil topgan oddiy kataloglar. __init__.py fayli bu kataloglarning maxsus ekanligini, ya’ni Piton modullari joylashganligini bildiradi.

Tasavvur qiling, biz “world” nomlik paket va uning ichida “asia”, “afrika” va hokazo nomli subpaketlar hamda ularning ichida “uzbekistan”, “madagascar” kabi modullari bor strukturani hosil qilmoqchimiz. Buning uchun biz quyidagi strukturadagi kataloglarni hosil qilishimiz kerak bo’ladi.

| – <sys.path biror katalog>/

| |—- world/

|         |—- __init__.py

|         |—- asia/

|         |      |—- __init__.py

|         |      |—- uzbekistan/

|         |            |—- __init__.py

|         |            |—- foo.py

|         |—- africa/

|              |—- __init__.py

|              |—- madagascar/

|                    |—- __init__.py

|                    |—- bar.py

Paketlar – modullarni iyerarxiyaviy(tadrijiy) tashkil qilishning qulay usuli hisoblanadi. Bunday hollar Pitonning standart kutubxonalarida tez-tez uchraydi.

(440 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: