Modularno programiranje — moduli i import
Kada program postane veći, nije praktično da sav kod pišemo u jednom fajlu. Zato koristimo modularno programiranje.
Modularno programiranje znači da program delimo na manje delove — posebne Python fajlove koji se zovu moduli. Svaki modul sadrži funkcije i promenljive koje se bave jednom konkretnom stvari.
Na primer:
- jedan modul može da računa matematiku
- drugi modul može da radi sa tekstom
- glavni program koristi te module
Ovako program postaje čitljiviji, lakši za razumevanje i lakši za proširivanje.
Zašto koristiti module?
- Bolja organizacija — kod je podeljen u logične celine
- Ponovna upotreba — isti modul možeš koristiti u više projekata
- Lakše testiranje — proveravaš deo po deo
- Manje grešaka — ne ponavljaš isti kod više puta
Kako napraviti i koristiti svoj modul
Modul je običan Python fajl (.py).
U njega pišemo funkcije, a zatim ga koristimo u drugom fajlu.
# fajl: pomocne_funkcije.py
def pozdravi():
print("Zdravo iz modula!")
U glavnom programu taj modul uvozimo pomoću import.
# fajl: glavni.py
import pomocne_funkcije
pomocne_funkcije.pozdravi()
U Thonny-ju je važno da oba fajla budu u istoj fascikli.
Pokrećeš fajl glavni.py, a funkcija se izvršava iz modula.
Različiti načini uvoza modula
Postoji više načina da uvezeš modul, u zavisnosti od potrebe.
1. Običan import
import math
print(math.sqrt(16))
Pozivaš funkcije tako što napišeš ime_modula.ime_funkcije.
2. Import sa aliasom (skraćenim imenom)
import math as m
print(m.sqrt(25))
Alias se često koristi da bi se kraće pisalo.
3. Uvoz konkretne funkcije iz modula
from math import sqrt
print(sqrt(36))
Ovde ne moraš da pišeš ime modula ispred funkcije.
Primer: više funkcija u jednom modulu
# fajl: matematika.py
def saberi(a, b):
return a + b
def pomnozi(a, b):
return a * b
# fajl: program.py
import matematika
print(matematika.saberi(3, 4))
print(matematika.pomnozi(5, 6))
Na ovaj način modul postaje mala „biblioteka“ funkcija.
Paketi (kratak uvod)
Kada projekat postane veći, module možemo grupisati u pakete (fascikle).
projekat/
│
├── glavni.py
└── alati/
├── __init__.py
└── matematika.py
Tada modul uvozimo ovako:
from alati.matematika import saberi
print(saberi(10, 5))
Za sada je dovoljno da razumeš ideju — paketi služe za još bolju organizaciju većih projekata.
Dobre prakse i česte greške pri radu sa modulima
Kada koristiš module, važno je ne samo da znaš kako da ih uvezeš, već i kako da ih pravilno koristiš. Ovo su najvažniji saveti za početnike.
Dobre prakse
-
Jedan modul — jedna svrha
Modul treba da radi jednu glavnu stvar. Na primer: jedan modul za matematiku, drugi za rad sa tekstom. -
Jasna i smislena imena fajlova
Ime modula treba da opisuje šta se u njemu nalazi (matematika.py,tekst_alati.py). -
Korišćenje import bez zvezdice
Bolje je pisati:
import matematika
nego:
from matematika import * -
Funkcije sa jasnom ulogom
Svaka funkcija treba da radi jednu stvar i da ima razumljivo ime. -
Komentari i kratki opisi
Kratak komentar na početku modula pomaže drugima (i tebi kasnije) da razumeju čemu modul služi.
Česte greške početnika
-
Fajlovi nisu u istoj fascikli
Ako Python ne može da pronađe modul, proveri da li su fajlovi u istom folderu. -
Pogrešno ime modula
Ime fajla mora tačno da se poklapa sa imenom uimportnaredbi. -
Zaboravljeno ime modula pri pozivu funkcije
Ako koristiš običanimport, funkciju moraš pozvati kao:
ime_modula.ime_funkcije() -
Prepisivanje koda umesto modula
Ako isti kod kopiraš više puta — to je znak da treba da napraviš modul.
Važna napomena
Ako vidiš poruku ModuleNotFoundError,
to znači da Python ne može da pronađe modul.
Najčešći uzrok je pogrešno mesto fajla ili pogrešno ime.
Modularno programiranje se uči postepeno — što više pišeš sopstvene module, to će ti ovaj način rada biti prirodniji.
Skriveni mini kviz — Python moduli i import
Klikni da proveriš da li razumeš kako funkcionišu
moduli, različiti oblici import naredbi
i organizacija koda u više fajlova.
Otvori kviz
Mini kviz: Moduli i import
1. Šta predstavlja Python modul?
2. Kako pravilno pozivaš funkciju pozdravi iz modula pomocne?
import pomocne
3. Šta radi sledeća naredba?
from math import sqrt
4. Koji je dobar razlog za korišćenje modula?
5. Gde se najčešće nalazi fajl koji uvoziš kao modul (u Thonny-ju)?
Zadaci za samostalan rad — Moduli i import (7. i 8. razred)
Zadaci su raspoređeni od lakih ka težim. Cilj je da samostalno vežbaš pravljenje modula, uvoz funkcija i organizaciju koda.
-
Laki zadatak — jednostavan modul
Napravi modul
pozdravi.pysa funkcijompozdravi()koja ispisuje tvoje ime i pozdrav. U glavnom fajluglavni.pyuvezi modul i pozovi funkciju. -
Modul sa više funkcija
Napravi modul
matematika.pysa funkcijamasaberi(a, b)ioduzmi(a, b). U glavnom programu pozovi obe funkcije sa nekoliko primera i ispiši rezultate. -
Import sa aliasom
Napravi modul
tekst_alati.pysa funkcijomobrni_string(s). U glavnom programu uvezi modul koristeći aliasimport tekst_alati as tai pozovi funkciju preko aliasa. -
Više fajlova i funkcija
Napravi dva modula:
brojevi.pysa funkcijamaveci(a,b)imanji(a,b), iprogram.pykoji koristi obe funkcije i ispisuje rezultate.Uputstvo: Obrati pažnju da se fajlovi nalaze u istoj fascikli i da koristiš
import. -
Takmičarski nivo — mini biblioteka funkcija
Napravi modul
alati.pykoji sadrži najmanje 3 različite funkcije po tvom izboru (npr. računanje kvadrata, sabiranje, obrada teksta). Napravi glavni program koji uveze modul i koristi sve funkcije.Uputstvo: Pazi da imena funkcija budu jasna i logična. Razmisli kako bi organizovao kod da kasnije možeš da dodaješ nove funkcije bez problema.
Savet: Ako nisi siguran kako funkcioniše uvoz, napravi male testove: pozovi funkcije i vidi rezultate. Postepeno dodaj nove funkcije i module.
Sledeći korak — primena znanja kroz projekat
U ovoj lekciji naučio si kako da koristiš funkcije i kako da organizuješ kod pomoću modula. Sledeći logičan korak je da sve to primeniš u pravom programu.
U narednoj lekciji radićemo mini projekat u kome ćemo poznatu igru „Pogodi broj“ preraditi tako da:
- kod bude podeljen na više funkcija
- program koristi više fajlova (module)
- logika igre bude jasnija i lakša za proširenje
Ovaj projekat je namenjen učenicima koji žele da naprave korak dalje i rade kao pravi programeri.