Asosiy mazmunga o'tish

16-dars: Modul va import

4-blokO'z buyruqlaringizni yasash13–16 darslar

Bu darsdan keyin siz

  • o’z faylingizni modul sifatida import qilasiz
  • import bajarilganda Python nima qilishini bosqichma-bosqich aytasiz
  • fayl nomlash qoidasi nega muhim ekanini sabab bilan tushuntirasiz

Modul yasash uchun maxsus hech narsa qilish kerak emas. Har .py fayl modul: uni yonidagi boshqa fayldan import qilish mumkin.

modulmodule

Import qilinadigan .py fayl. Ichidagi funksiya va o’zgaruvchilar modul.nom ko’rinishida ishlatiladi.

matematika.py
# matematika.py faylidef kvadrat(son):  return son * sondef kub(son):  return son * son * son
asosiy.py
# asosiy.py fayli — yonidagi modulni ishlatadiimport matematikaprint(matematika.kvadrat(5))     # 25print(matematika.kub(3))         # 27

import matematika butun modulni oladi va nomlar matematika. prefiksi bilan ishlatiladi. from matematika import kvadrat faqat bitta nomni oladi va prefiks kerak bo’lmaydi. import matematika as m esa qisqa nom beradi.

shakllar.py
from matematika import kvadratprint(kvadrat(5))            # prefiks kerak emasimport matematika as mprint(m.kub(3))              # qisqa nom

from modul import * shakli ham bor, lekin u ishlatilmaydi: qaysi nom qayerdan kelganini bilib bo’lmaydi va nomlar bir-birini bosib qo’yishi mumkin.

import uch ish bajaradi. Modul faylini topadi, uni bir marta bajaradi (ya’ni ichidagi barcha qatorlarni ishga tushiradi) va natijani eslab qoladi.

Ikkinchi qism kutilmagan bo’lishi mumkin: modul ichidagi print import paytida ishlaydi. Uchinchisi ham muhim — bir modul ikki marta import qilinsa, fayl faqat bir marta bajariladi.

Qidiruv tartibi qat’iy: allaqachon yuklangan modullar, o’rnatilgan modullar, skript papkasi, keyin standart kutubxona va o’rnatilgan paketlar.

Uchinchi qadam eng muhimi. Skript papkasi standart kutubxonadan oldin tekshiriladi — demak papkangizdagi random.py fayli standart random modulini bosib qo’yadi.

Bu qoida 0-darsda “fayl nomlash qoidalari” sifatida aytilgan edi. Endi sababi ma’lum.

Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.

Bashorat qiling
# salom.py fayli:#   print("salom.py ishga tushdi")#   def salomlash():#       return "Salom!"# Endi asosiy.py:import salomimport salomprint(salom.salomlash())
Javobni ko'rish
salom.py ishga tushdi
Salom!

Modul ikki marta import qilingan, lekin fayl faqat BIR MARTA bajarildi. Ikkinchi import xotiradagi tayyor modulni oldi — shuning uchun birinchi qator bir marta chiqdi.

Avval o'ylang: bu kod nima chiqaradi? Ishga tushirishdan oldin yozing.

Bashorat qiling
import mathprint(math.floor(7.9))print(math.ceil(7.1))print(math.sqrt(16))
Javobni ko'rish
7
8
4.0

math standart kutubxonadan keladi. sqrt har doim float qaytaradi — shuning uchun 4 emas, 4.0.

Uch variantni ketma-ket bajaring. Uchinchisi — random.py tuzog’i — sinfda haqiqatan uchraydigan xato va uni bir marta ko’rgan o’quvchi takrorlamaydi.

Import yo'li

Variantni tanlab qadamlang: Python qaysi joyni qanday tartibda qidiradi. Klaviatura: → keyingi qadam.

Bu simulyatorda import bajarilganda Python fayllarni qaysi tartibda qidirishi ko'rsatiladi: yuklangan modullar, o'rnatilgan modullar, skript papkasi, standart kutubxona.

JavaScript'siz eng muhim xulosa: skript papkasi standart kutubxonadan OLDIN tekshiriladi. Shuning uchun papkangizda «random.py» fayli bo'lsa, import random sizning faylingizni oladi va standart kutubxonaga navbat kelmaydi.

Papka

    Kod

    1. 1Allaqachon yuklangan modullarsys.modules
    2. 2O'rnatilgan modullarsys, math kabi
    3. 3Skript papkasisizning fayllaringiz
    4. 4Standart kutubxonarandom, csv, os

    Bu kod ataylab buzuq — xatoni toping

    Buzuq kod
    # Papkada: asosiy.py va random.py (o'zingiz yozgan fayl)import randomson = random.randint(1, 6)print(son)

    Python shunday javob beradi:

    Traceback (most recent call last):
    File "asosiy.py", line 3, in <module>
      son = random.randint(1, 6)
    AttributeError: module 'random' has no attribute 'randint'
    Sababi va tuzatish

    import random sizning random.py faylingizni oldi, chunki skript papkasi standart kutubxonadan oldin qidiriladi. Sizning faylingizda randint funksiyasi yo'q.

    Xato xabari aldamchi: “modulda bunday funksiya yo’q” deyilgan, lekin muammo funksiyada emas — noto’g’ri modul yuklangan.

    Tuzatish: faylingizning nomini o’zgartiring, masalan mening_random.py. Bundan tashqari papkada __pycache__ degan papka qolgan bo’lsa, uni ham o’chirib tashlang.

    Bir xil sababdan input.py, csv.py, math.py, string.py nomlari ham ishlatilmaydi.

    1Modul yasash uchun nima qilish kerak?

    Javobni ko'rish

    Hech narsa. Har .py fayl modul — uni yonidagi fayldan import qilish kifoya.

    2import bajarilganda uch ish qiladi. Qaysilar?

    Javobni ko'rish

    Faylni topadi, uni bir marta bajaradi va natijani eslab qoladi. Ikkinchi import xotiradagi tayyorini oladi.

    3Modul ichidagi print qachon ishlaydi?

    Javobni ko'rish

    Import paytida — modul bajarilganda. Shuning uchun modul faylida faqat e’lonlar qoldirilishi yaxshi.

    4Nega faylni random.py deb nomlash mumkin emas?

    Javobni ko'rish

    Skript papkasi standart kutubxonadan oldin qidiriladi, demak sizning faylingiz standart random modulini bosib qo’yadi.

    5from modul import * nega ishlatilmaydi?

    Javobni ko'rish

    Qaysi nom qayerdan kelganini bilib bo’lmaydi va nomlar bir-birini bosib qo’yishi mumkin. Aniq import har doim aniqroq.

    Topshiriq — darajangizni tanlang

    Asos · 5–7-sinf — Vizual va aniq ko'rsatmali

    hisob.py moduli yozing: ichida qoshish(a, b) va ayirish(a, b) funksiyalari bo’lsin. Keyin asosiy.py faylidan uni import qilib, to’rtta hisobni chop eting. Ikki fayl bir papkada bo’lishi kerak.

    Mustahkam · 8–9-sinf — Matnli masala, o'zingiz tuzasiz

    Oldingi darslarda yozgan funksiyalaringizni bitta modulga yig’ing va asosiy.py dan chaqiring. Modul boshiga print("modul yuklandi") qo’shib, ikki marta import qilib ko’ring — natijani izohlang. Keyin import ning uch shaklini ham sinab, qaysi holatda qaysi biri qulay ekanini yozing.

    Chuqur · 10–11-sinf — Algoritmik, chegara holatlari bilan

    random.py tuzog’ini ataylab yasang: papkada shunday fayl ochib, import random qiling va xatoni oling. Keyin uni tuzatib, __pycache__ papkasi nima uchun kerakligini aniqlang. Oxirida uch qoidali ro’yxat yozing: fayl nomlashda nima qilinmaydi va nega — har qoidaga sabab qo’shing.

    Darsni belgilash uchun JavaScript kerak. Bu progressni saqlash uchun ishlatiladi — darslikning o'zi JavaScript'siz ham to'liq o'qiladi.