Python Vadovėlis/Modulių naudojimas
Modulių naudojimas
Štai šio skyriaus pratimas. Failas, kuriame yra ši užduotis, geriausia būtų pavadinti kalendorius.py, kad nesimaišytų su importuojamu calendar.py moduliu. Modulis iš tiesų yra failas su priesaga .py, kuriame yra papildomų funkcijų rinkinys, kurį norite įtraukti ir naudoti savo programoje. Eilutė import calendar
iš tikrųjų ieško failo pavadinimu calendar.py ir jį su jo funkcijomis įtraukia į savo kodą, kad galėtume naudoti prcal
funkciją, kuri atspausdins visų metų kalendorių. Jei failas būtų pavadintas calendar.py ir matytų import calendar
, jis bandytų skaityti pats save, ir kodas tada neveiktų tinkamai.
import calendar
metai = int(input("Įvesk metų skaičių: "))
calendar.prcal(metai)
Ir čia yra gautos programos išvestis:
Įvesk metų skaičių: 2001 2001 Sausis Vasaris Kovas Pr An Tr Ke Pe Še Se Pr An Tr Ke Pe Še Se Pr An Tr Ke Pe Še Se 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31
(Aš praleidau kai kurias išvesties dalis, bet manau, kad principas aiškus.) Taigi, ką daro programa? Pirma eilutė import calendar
naudoja naują komandą import
. Komanda import
įkelia modulį (šiuo atveju calendar
modulį). Norint pamatyti standartiniuose moduliuose esančias funkcijas, ieškok Python'o bibliotekos nuorodos (jei atsisiuntei biblioteką) arba eik į http://docs.python.org/3/library/. Jei pažvelsi į kalendoriaus modulio dokumentaciją, jame yra funkcija, vadinama prcal
, kuri spausdina metų kalendorių. Komanda calendar.prcal(metai)
naudoja šią funkciją. Apskritai, norint naudoti modulį, reikia naudoti raktažodį import
ir kartu panaudoti modulio_pavadinimas.function
, kreipiantis į funkcijas esančias modulyje. Yra ir kitas būdas parašyti analogišką programą:
from calendar import prcal
metai = int(input("Įveskite metų skaičių: "))
prcal(metai)
Šis variantas importuoja konkrečią funkciją iš modulio. Panagrinėkime dar vieną programą, kuri naudoja Python'o biblioteką (pavadink ją clock.py) (tuo pačiu metu paspausk Ctrl ir klavišą c, kad nutrauktum darbą):
from time import time, ctime
ankstesnis_laikas = ""
while True:
laikas = ctime(time())
if ankstesnis_laikas != laikas:
print("Laikas:", ctime(time()))
ankstesnis_laikas = laikas
Dalis išvesties yra:
Laikas: Tue Dec 21 13:14:20 2021 Laikas: Tue Dec 21 13:14:21 2021 Laikas: Tue Dec 21 13:14:22 2021 Laikas: Tue Dec 21 13:14:23 2021 Traceback (most recent call last): File "laikas.py", line 5, in <module> laikas = ctime(time()) KeyboardInterrupt
Kadangi išvestis yra begalinė, todėl ją atšaukiu (kitu atveju, išvestis tęstųsi bent jau tol, kol būtų paspaustas Ctrl+C). Programa atlieka nesibaigiantį ciklą (True
yra visada tiesa, taigi while True:
vykdoma amžinai). Kiekvieną kartą patikrina, ar laikas nepasikeitė, ir išspausdina, jei pasikeitė. Atkreipk dėmesį, kaip naudojami keli funkcijų pavadinimai po import sakinyje from time import time, ctime
.
Python'o bibliotekoje yra daug naudingų funkcijų. Šios funkcijos suteikia Tavo programoms daugiau galimybių ir daugelis jų gali supaprastinti programavimą Python'u.
Pratimai
Perrašyk daugiau_maziau.py
programą iš skyriaus Pasirinkimai, kad naudotų atsitiktinį sveikąjį skaičių nuo 0 iki 99, o ne įkoduotą 7. Naudok random
modulį ir randint
funkciją.
Sprendimas | |
---|---|
from random import randint
skaičius = randint(0, 99)
spėjimas = -1
while spėjimas != skaičius:
spėjimas = int(input ("Atspėk skaičių: "))
if spėjimas > skaičius:
print("Per didelis")
elif spėjimas < skaičius:
print("Per mažas")
print("Būtent tas")
|
Kiti moduliai
Kartais Tu gali norėti naudoti Python'o modulį, kurio nėra standatinėje Python versijoje. Tu gali juos importuoti, tačiau pirmiau turėsi juos įsidiegti savo kompiuterį.
Kuriant savo modulį
Kai Python'as skaito importavimo komandą, jis pirmiausia patikrina Tavo katalogo failus, po to svetainės paketus ir iš anksto įdiegtus modulius. Norint sukurti savo modulį, tiesiog sukurk .py failą dabartiniame kataloge ir parašyk komandą:
import modulis
Taip bus bandoma importuoti failą modulis.py iš dabartinio katalogo, o jei modulis bus nerastas, iš svetainių paketų ir iš anksto paruoštų modulių. Pakeitus modulį į Tavo sukurto .py failo pavadinimą, jis bus importuotas.
Tačiau kai jis importuoja modulį, jis iš esmės paleidžia failą kaip programą, todėl bet koks jame esantis kodas bus paleistas. Patartina visą kodą sugrupuoti į funkcijas.
__name__ == __main__ triukas
Python'e kintamasis __name__
suteiks dabartinį programos pavadinimą. Jei importuojamas modulis spausdina __name__
kintamąjį, tada jis atspausdins modulio pavadinimą. Jei dabartinis failas spausdina __name__
kintamąjį, jis atspausdins __main__
, tam, kad parodytų, kad tai yra pagrindinė programa.
Sąlyginis sakinys patikrina vardo kintamąjį ir paleidžia kodą, jei programa yra pagrindinė. Taip ji gali apeiti netyčinio paleidimo problemą, sukuriamą importuojant modulį. Tarkime, kad turi failą, kuriame veikia tam tikras kodas. Jis taip pat turi funkciją, kurią nori naudoti kitoje programoje. Tačiau nori tik funkcijos, esančios faile, o ne paleisti vykdyti kodą. Parašius žemiau pateiktą kodą, programa bus vykdoma tik tuo atveju, jei bus spustelėtas ar paleistas vykdyti esamas failas, o ne importuotas.
if __name__ == '__main__':
pass
Šiuo atveju, jei failas paleidžiamas, bet neimportuojamas, jis vykdys komandą pass. Pass komandą galite pakeisti kodu, kurį norite paleisti, kai jis nėra importuotas. Tiesiog nepamiršk to kodo parašyti.
pip modulis
Pip modulis yra įdiegtas kartu su Python'u ir veikia kaip modulio atsisiuntėjas/tvarkytojas. Kitus modulius galima atsisiųsti iš interneto naudojant pip.
Pip modulis nenaudojamas Python'o interpretatoriuje, bet yra vykdomas per komandinę eilutę. Norint jį naudoti, atidaryk komandų eilutės programėlę (Windows tai yra komandinė eilutė, Mac/Linux – terminalas) ir įvesk šį kodą:
py3 -m pip install modulis
arba alternatyvus kodas
pip install modulis
Ši komandų eilutė bandys atsisiųsti ir įdiegti modulį iš vartotojo pateiktos Python'o modulių duomenų bazės. Modulis gali būti pakeistas į konkretaus modulio pavadinimą.