Importai ir moduliai - herburt30/info GitHub Wiki
I. Įvadas į importą ir modulius
Modulių importavimas leidžia pridėti išorinį kodą į savo programą, nesikartojant ir neperrašant jau esamų funkcijų ar kodo fragmentų. Tai gali būti bibliotekos, tiekiame jūsų Py sukurti modulius, kurie yra tiekiami per importo mechanizmą.
Importuojant modulį, galime naudoti modulio pavadinimą ir pasiekti jo funkcijas ar klases per taško operatorius.
II. STL. Jis išsiverčia, kaip įprastinės bibliotekos (Standart Library)
Pagrindiniai integruoti moduliai:
--- RANDOM (atsitiktiniams elementams atrinkti)
--- MATH (matematiniams veiksmams atlikti)
--- TIME (laiko nustatymo veiksmams atlikti)
--- OS (operacinės sistemos informacijai apdoroti)
--- EMAIL (darbui su elektroniniu paštu) ir daugelis kitų
III. Python programavimo kalba turi PyPI (pilnas pavadinimas: Python Package Index) – tai oficialusis Python programų paketų saugykla, kurioje programuotojai gali publikuoti ir dalintis savo Python bibliotekomis ir moduliais.
Ką gali daryti PyPI? Leisti naudotojams įdiegti Python bibliotekas per komandą pip install <paketo_pavadinimas>;
Leisti kūrėjams publikuoti savo paketus, kad kiti galėtų juos naudoti;
Saugo tūkstančius atviro kodo paketų – nuo mašinų mokymosi bibliotekų iki „web“ programavimo įrankių.
III. 1. RANDOM modulis
--- Paprastas importavimas
import random
print(random.randint(0, 4))
--- Importuojant modulį, galime naudoti modulio pavadinimą ir pasiekti jo funkcijas ar klases per taško operatorius.
x = random.randint(1, 10)
print(f"Atsitiktinis int skaičius nuo 1 iki 10: {x}")
Apibendrinimas => labai svarbu importuoti, pasiekti visą modulį ir taško operatorių, kad iškviečiame reikalingas funkcijas.
--- Programuojame random float
print(random.random() * 100)
--- Programuojame string su pasirinkimo metodu - choice
r = random.choice(['Python', 'PHP', 'JAVA', 'HTML', 'JAVASCRIPT'])
print(r)
--- Programuojame random data type
r1 = ['string', 123, 5.5, True]
rnd = random.choice(r1)
print(rnd)
IV. Specifinių funkcijų importavimas
- --- Galime importuoti tik tas funkcijas ar klases, kurios yra reikalingos, taip sumažinant kodą ir nereikalaudami naudoti taško operatoriaus.
from random import randint, choice
x = randint(1, 10)
y = choice(["sausis", "vasaris", "kovas"])
print("x")
Apibendrinimas => Specifinių funkcijų importavimas leidžia tiesiogiai naudoti funkcijas be modulio pavadinimo, taip supaprastinant kodą.
- --- Metodas shuffle – tai funkcija iš Python standartinės bibliotekos random modulio, kuri atsitiktinai permaišo sąrašo elementų eiliškumą vietoje (in-place).
masyvas =['list', '2nd_list', 4587, 2.3, False, 879, True]
random.shuffle(masyvas)
print(masyvas)
- --- Programuojame Sample. „Sample“ metodas dažniausiai reiškia įvertinti, kuri atsitiktinai atrenka pavyzdžius. Pvz. Atrenka visus ketvertus
masyvas2 = [1, 2, 3, 4, 5, 6, 7, 4, 8, 9]
print(random.sample(masyvas2, 3)) # kiekvieną kartą atrenka atsitiktine tvarka skaičių, kurį nurodote
print(random.sample(masyvas2, 15)) # Negali įvykdyti, nes masyve nėra tiek elementų
- --- Programuojame Shuffle metodu sąrašą iš skaičių
list1 = [i for i in range(10)]
random.shuffle(list1)
print(list1)
=> Palyginame Sample ir Shuffle metodus
data = [1, 2, 3, 4, 5]
random.shuffle(data)
print(data)
data = [1, 2, 3, 4, 5]
subset = random.sample(data, 3)
print(data)
print(subset)
- --- random random funkcija generuoja skaičių nuo 0 iki 1
print(random.random()) # 0.5385989597435976
- --- uniform funkcija generuoja nurodytą skaičių nuo pradžios iki pabaigos
print(random.uniform(5, 15)) # 9.569913949720817
- --- Programuojame randrange() method1 ... pirmas skaicius yra pradžia, antras skaičius pabaiga, trečias žingsnis
for i in range(10):
print(random.randrange(0, 200, 5))
!!! Game. --- Naudojant random metodą pasirenkama monetos aversas arba reversas
pasirinkimas = {'Aversas': 0, 'Reversas': 0}
moneta = list(pasirinkimas.keys())
for i in range(10000):
pasirinkimas[random.choice(moneta)] += 1
print('Aversas: ', pasirinkimas['Aversas'])
print('Reversas: ', pasirinkimas['Reversas'])
arba
!!! Game2 =>
num = random.randint(1, 10)
while True:
print('Įvedame savo pasirinktą skaičių: ')
num1 = int(input())
if num1 == num:
print('Atspėjote')
break
else:
print('Neatspėjote')
IV. --- Modulio trumpinimas naudojant alias
- Galime suteikti modulio pavadinimui sutrumpa, kad išvengtume ilgesnių pavadinimų.
import random as rn
x = rn.randint(20, 25)
y = rn.choice(["sausis", "vasaris", "kovas"])
print(x, y)
=> Apibendrinimas: naudoju alias, moduliui suteikiame sutrumpintą vardą, kurį vėliau visiems programoje.
- Galime ne tik importuoti specifines funkcijas, bet ir joms trumpesnius pavadinimus.
import random as rnt
from random import randint as rnt
x = rnt(1, 10)
print(x)
=> Apibendrinimas: Alias naudojimas suteikia galimybę labiau optimizuoti kodą ir naudoti trumpus, aiškius pavadinimus dažnai naudojamoms funkcijoms.
- Importuojant viską iš modulio, gauname prie visų jo funkcijų be pavadinimo, bet tai gali sukelti neaiškumų ir konfliktų.
from random import *
x = sample(["sausis", "vasaris", "kovas"], k=3)
print(x)
=> Apibendrinimas: Šis būdas nėra rekomenduojamas, nes sunku kontroliuoti, kurios funkcijos ar kintamieji buvo importuoti, ir tai gali sukelti nenumatytų problemų.
V. Importai iš mūsų sukurto modulio
Modulių kūrimas leidžia kurti atskirus failus su funkcijomis ir logika, kuriuos galima importuoti į kitus projektus ar failus. Tai suteikia didesnį kodo modularumą ir leidžia organizuoti programą efektyviau.
=> Failas => Testas2.py
x = ["sausis", "vasaris", "kovas"]
=> Failas => Testas.py
from Testas2 import *
print(x)
=> Rezultatas => ['sausis', 'vasaris', 'kovas']
VI. Visas modulio importavimas
=> Importuodami visą modulį, naudojame taško operatorių, kad pasiektume jo funkcijas ar kitas struktūras.
- Pirmas failas => projektas.py
def dalink(a, b):
"""Padalina a iš b."""
if b == 0:
return "Dalyba iš nulio negalima"
return a / b
- Antras failas => test.py
import projektas
res = projektas.dalink(10, 7)
print(res)
Rezultatas => 1.4285714285714286
=> Apibendrinimas: Visas modulio importavimas leidžia pasiekti visas jo funkcijas, bet kiekvieną kartą reikia naudoti modulio pavadinimą prieš funkciją.
VII. Specifinių funkcijų importavimas
-
Galime importuoti tik reikiamas funkcijas iš modulio, taip sumažinant kodą.
-
Pirmas failas => projektas.py
def dalink(a, b):
"""Padalina a iš b."""
if b == 0:
return "Dalyba iš nulio negalima"
return a / b
def daugink(a, b):
"""Padaugina a iš b."""
if b == 0:
return "Daugyba iš nulio negalima"
return a * b
- Antras failas => test.py
from projektas import dalink, daugink
res = projektas.dalink(10, 7)
print(res)
Rezultatas => 1.4285714285714286
res2 = projektas.daugink(10, 7)
print(res2)
Rezultatas => 70
--- Apibendrinimas: Specifinių funkcijų importavimas leidžia tiesiogiai naudoti funkcijas be modulio pavadinimo, kas supaprastina kodą.
---> Užduotis => Sukuriame skirtingus failus su daugyba, atimtimi, sudėtimi, pakėlimo laipsniu, likučiu ir sveikaja liekana <---
VIII. Importai iš katalogo (folder)
--- Importuodami modulį iš folderio, nurodome jo kelią per taško operatorių, kad pasiektume funkcijas.
--- Sukuriame katalogą ir perkeliame failą - projektas.py
- Sutvarkome failą - test.py ir katalogo pavadinimui priskiriame kataloge esančio failo pavadinimą
import katalogas.projektas
res = katalogas.projektas.dalink(10, 4)
print(res)
res2 = katalogas.projektas.daugink(10, 5)
print(res2)
=> Rezultatas =>
2.5 50
--- Apibendrinimas: Modulis, saugomas projekto folderyje, gali būti importuojamas nurodant jo kelią su taško operatoriumi. Tai suteikia prieigą prie visų funkcijų naudojant pilną modulio vardą.
IX. Užduotis
Užduoties aprašymas:
Naudojant random modulį, sugeneruokite atsitiktinę datą per šių metų metus.
Naudojant calendar modulį, nustatykite, kuri savaitės diena (pavyzdžiui, pirmadienis, antradienis ir t.t.) yra šią atsitiktinę datą.
Išveskite sugeneruotą datą ir savaitės dieną, kuriai ši data priklauso.
--- Kodas
import random import calendar
metai = 2025
menuo = random.randint(1, 12)
menesio_diena = calendar.monthrange(metai, menuo)[1]
diena = random.randint(1, menesio_diena)
pasirinkimas = f"{metai}-{menuo:02d}-{diena:02d}"
weekday = calendar.weekday(metai, menuo, diena)
weekdays = ['Pirmadienis', 'Antradienis', 'Trečiadienis', 'Ketvirtadienis', 'Penktadienis', 'Šeštadienis', 'Sekmadienis']
dienos_pavadinimas = weekdays[weekday]
print(f"Sugeneruota data: {pasirinkimas}")
print(f"Tai buvo: {dienos_pavadinimas}")
--- Atsakymas
Sugeneruota data: 2025-12-15 Tai buvo: Pirmadienis