Koji su moduli u Pythonu?
Modul je datoteka s python kodom. Kôd može biti u obliku definiranih varijabli, funkcija ili klase. Naziv datoteke postaje naziv modula.
Na primjer, ako je vaše ime datoteke guru99.py, naziv modula bit će guru99 . Pomoću funkcionalnosti modula možete razbiti svoj kod u različite datoteke, umjesto da sve zapisujete u jednu datoteku.
U ovom vodiču naučit ćete:
- Koji su moduli u Pythonu?
- Python modul za uvoz
- Kako stvoriti i uvesti modul u Pythonu?
- Uvoz klase u Python
- Upotreba modula za uvoz
- Uvoz svega iz modula
- Korištenje modula za uvoz
- Korištenje uvoza *
- Funkcija dir ()
- Paketi
- PythonModuleSearchPath
- Korištenje zamjenskog imena modula u uvozu
- Apsolutni i relativni uvoz u Python
- UsingAbsoluteImports
- KorištenjeRelativeImports
Što je Python modul za uvoz?
Datoteka se smatra modulom u pythonu. Da biste koristili modul, morate ga uvesti pomoću ključne riječi import . Funkcija ili varijable prisutne unutar datoteke mogu se koristiti u drugoj datoteci uvozom modula. Ova je funkcija dostupna na drugim jezicima, kao što su strojopis, JavaScript, Java, ruby itd.
Kako stvoriti i uvesti modul u Pythonu?
Sada ćemo stvoriti modul i uvesti ga u drugu datoteku.
Evo tijeka izrade i uvoza modula kako je prikazano na snimci zaslona:
Slijedite korake dane za stvaranje modula u pythonu.
Struktura mape koja se koristi za testiranje koda je sljedeća:
modtest/test.pydisplay.py
Korak 1) Stvorite datoteku i nazovite je test.py
Korak 2) Unutar test.py stvorite funkciju koja se naziva display_message ()
Def display_message():return "Welcome to Guru99 Tutorials!"
Korak 3) Sada stvorite drugu datoteku display.py.
Korak 4) Unutar display.py uvezite datoteku moduletest.py, kao što je prikazano u nastavku:
import test
Tijekom uvoza ne morate spominjati test.py, već samo ime datoteke.
Korak 5)
Tada možete pozvati funkciju display_message () iz test.py unutar display.py, trebate koristiti module_name.function_name.
Na primjer test.display_message ().
Import testprint(test.display_message())
Korak 6)
Kada izvršite display.py, dobit ćete sljedeći izlaz:
Welcome to Guru99 Tutorials!
Uvoz klase u Python
Ranije smo vidjeli jednostavan modul s funkcijom. Ovdje će se stvoriti klasa i uputiti klasa u drugu datoteku.
Struktura mape za testiranje koda je sljedeća:
myproj/Car.pydisplay.py
Stvorite datoteku pod nazivom Car.py sa sljedećim kodom:
Naziv datoteke: Car.py
class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef car_details(self):print("Car brand is ", self.brand_name)print("Car model is ", self.model)print("Car manufacture year is ", self.manu_year)def get_Car_brand(self):print("Car brand is ", self.brand_name)def get_Car_model(self):print("Car model is ", self.model)
U datoteci Car.py nalaze se atributi brand_name, model i manu_year. Funkcije definirane unutar klase su car_details (), get_Car_brand (), get_Car_model ().
Koristimo sada datoteku Car.py kao modul u drugoj datoteci koja se naziva display.py.
Naziv datoteke: display.py
import Carcar_det = Car.Car("BMW","Z5", 2020)print(car_det.brand_name)print(car_det.car_details())print(car_det.get_Car_brand())print(car_det.get_Car_model())
Izlaz:
BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5
Tako možemo pristupiti svim varijablama i funkcijama iz Car.py koristeći Car modul.
Upotreba modula za uvoz
Iz modula možete uvesti samo mali dio modula, tj. Samo potrebne funkcije i nazive varijabli, umjesto uvoza cijelog koda.
Kada želite uvesti samo određene stvari, možete upotrijebiti ključnu riječ "from" za uvoz onoga što želite.
Sintaksa je dakle
from module import your function_name , variables,… etc.
Struktura mape koja se koristi za testiranje koda je sljedeća:
modtest/test.pydisplay.py
U test.py postoje 2 funkcije kao što je prikazano:
Naziv datoteke: test.py
defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Sada želite funkciju display_message (). Funkciji ili varijabli koju uvozite može se izravno pristupiti kao što je prikazano u nastavku:
Naziv datoteke: display.py
from test import display_messageprint(display_message())
Izlaz:
Welcome to Guru99 Tutorials!
Ako slučajno koristite funkciju display_message1 (), izbacit će pogrešku da funkcija nije definirana kako je prikazano dolje:
from test import display_messageprint(display_message1())
Izlaz:
Traceback (most recent call last):File "display.py", line 3, inprint(display_message1())Name Error: name 'display_message1' is not defined
Uvoz svega iz modula
Uvoz vam omogućuje uvoz cijelog modula korištenjem uvoza nakon kojeg slijedi naziv modula, tj. Naziv datoteke ili knjižnica koja će se koristiti.
Sintaksa:
Import module
Ili pomoću
from module import *
Struktura mape koja se koristi za testiranje koda je sljedeća:
modtest/test.pydisplay.py
Slijede detalji koda unutar test.py
my_name = "Guru99"my_address = "Mumbai"defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Korištenje modula za uvoz
Koristeći samo ime modula za uvoz, da bi se pozvao na varijable i funkcije unutar modula, on mora imati prefiks s imenom modula.
Primjer
Naziv datoteke: display.py
Import testprint(test.display_message())print(test.display_message1())print(test.my_name)print(test.my_address)
Test naziva modula koristi se za upućivanje na funkciju i varijable unutar testa modula.
Izlaz:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Korištenje uvoza *
Pogledajmo primjer pomoću uvoza * . Korištenjem uvoza * funkcije i varijable izravno su dostupne, kao što je prikazano u primjeru dolje:
from test import *print(display_message())print(display_message1())print(my_name)print(my_address)
Izlaz:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Funkcija dir ()
Dir () je ugrađena funkcija u pythonu. Dir () vraća sva svojstva i metode, uključujući ugrađena svojstva datog objekta.
Dakle, kada se dir () koristi na modulu, dat će vam varijable, funkcije koje su prisutne unutar modula.
Evo radnog primjera dir () na modulu. Imamo klasu Car.py, uvezimo Car i dodijelimo dir () da vidimo izlaz.
Struktura mape za testiranje koda bit će sljedeća:
test prop/Car.pytest.py
Naziv datoteke: Car.py
class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef car_details(self):print("Car brand is ", self.brand_name)print("Car model is ", self.model)print("Car manufacture year is ", self.manu_year)def get_Car_brand(self):print("Car brand is ", self.brand_name)def get_Car_model(self):print("Car model is ", self.model)
Naziv datoteke: test.py
import Carclass_contents = dir(Car)print(class_contents)
Izlaz nam daje naziv klase i sve funkcije definirane u Car.py.
Također možete pokušati koristiti dir () na ugrađenom modulu dostupnom u Pythonu. Pokušajmo isto na json modulu kao što je prikazano u donjem primjeru. Prikazat će sva svojstva i metode dostupne u json modulu.
Import jsonjson_details = dir(json)print(json_details)
Izlaz:
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
Paketi
Paket je direktorij u kojem su definirani svi moduli. Da bi Python tumač tretirao kao paket, vaš direktorij treba imati init.pyfile. Init.py čini direktorij kao paket. Evo izgleda paketa na kojem ćemo raditi.
Naziv paketa je moj paket . Da biste započeli rad s paketom, stvorite direktorij nazvan package /. Unutar direktorija stvorite praznu datoteku zvanu __init__.py. Stvorite još 3 datoteke module1.py, module2.py i module3.py i definirajte funkcije kao što je prikazano na snimci zaslona. Evo pojedinosti o module1.py, module2.py i module3.py
module1.py
def mod1_func1():print("Welcome to Module1 function1")def mod1_func2():print("Welcome to Module1 function2")def mod1_func3():print("Welcome to Module1 function3")
module2.py
def mod2_func1():print("Welcome to Module2 function1")def mod2_func2():print("Welcome to Module2 function2")def mod2_func3():print("Welcome to Module2 function3")
module3.py
def mod3_func1():print("Welcome to Module3 function1")def mod3_func2():print("Welcome to Module3 function2")def mod3_func3():print("Welcome to Module3 function3")
Paket s spreman za korištenje. Sada nazovite paket unutar bilo koje datoteke, kao što je prikazano dolje: test.py:
Ovdje se mypackage.module1 uvozi i daje mu zamjensko ime kao mod1. Slično tome, možete koristiti i druge module module2.py i module3.py iz mog paketa.
import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())
Izlaz:
Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None
Upravo smo demonstrirali paket s jednostavnim modulom s funkcijama unutar njega. Prema vašem projektu, također možete pakirati s podpaketima. Podmape / s modulima s definiranim klasama.
Put pretraživanja modula Python
Tijekom izvršavanja, kada python naiđe na ime modula za uvoz , tumač pokušava pronaći modul. Pretražuje modul na popisu ugrađenih modula. Kasnije, sve direktorije definirane unutar sys.path.
Da rezimiramo, tumač vrši sljedeće pretraživanje kako bi pronašao modul:
- U vašem trenutnom direktoriju.
- U na popisu ugrađenih modula
- Unutar direktorija sys.path
Pojedinosti sys.path možete dobiti uvozom sys modula i ispisom sys.path. Dobit će vam popis direktorija kako je prikazano dolje:
importsysprint(sys.path)
Izlaz:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\DLLs']
Također možete izmijeniti putanju i zadržati direktorije prema vašim zahtjevima.
Korištenje zamjenskog imena modula u uvozu
Također možete pretvoriti naziv modula u kraći oblik dajući mu zamjensko ime. Zamjenski naziv može se izvršiti pomoću ključne riječi.
Sintaksa:
import filename as alias name
Struktura mape za testiranje koda bit će sljedeća:
Mod test/test.pydisplay.py
Slijedi kôd unutar test.py
my_name = "Guru99"my_address = "Mumbai"def display_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Sada će koristiti zamjensko ime za test.py u display.py
Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)
Alias koji se koristi za test modul je t. Dakle, funkcija i varijable iz test.py mogu se uputiti pomoću zamjenskog imena t.
Izlaz:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Apsolutni i relativni uvoz u Python
Sada znate kako uvesti datoteku kao modul iz druge datoteke. Pogledajmo sada kako upravljati datotekama dostupnim u mapama. Datoteke u mapama mogu se uvesti apsolutnim ili relativnim uvozom.
Uzmite u obzir da imate strukturu mape projekta, kao što je prikazano dolje:
Korijenska mapa je moj projekt /. Ima dvije podmape paket1 i paket2.
Mapa paket1 ima dva modula, module1.py i module2.py.
Mapa package2 ima jednu klasu myclass.py, potpaket subpkg s module3.py i zadnji module4.py.
- U module1.py postoji funkcija koja se naziva myfunc1.
- U module2.py postoji funkcija koja se naziva myfunc2.
- U module3.py postoji funkcija koja se naziva myfunc3.
- U module4.py postoji funkcija koja se naziva myfunc4.
Korištenje apsolutnog uvoza
Za apsolutni uvoz, morate dodati cijelu stazu vašeg modula izravno iz korijenske mape projekta.
Pogledajmo sada kako iskoristiti apsolutni uvoz za pozivanje na funkcije prisutne u svakom od modula.
Da biste radili s funkcijom myfunc1, morat ćete uvesti na sljedeći način:
from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()
Za rad s funkcijom myfunc3 morat ćete uvesti kako slijedi:
from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()
Prednosti i nedostaci korištenja apsolutnog uvoza
Evo prednosti korištenja apsolutnog uvoza:
- Postaje lako pratiti module za provjeru koda.
- Jednostavan za upotrebu i vrlo jednostavan.
- Ako se projekt premjesti na drugi put, uvoz će i dalje ostati isti.
Mane upotrebe apsolutnog uvoza
Evo nedostataka korištenja apsolutnog uvoza:
Mane:
- Uvozna staza može postati vrlo dugačka u slučaju da su moduli ugniježđeni i ako je naziv modula dugačak.
Korištenje relativnog uvoza
Uzimajući u obzir istu strukturu mapa spomenutu u nastavku, vidjet ćemo kako uvesti istu koristeći relativni uvoz.
U relativnom uvozu, modul koji se uvozi odnosi se na trenutno mjesto na kojem se nalazi izraz o uvozu.
Sintaksa:
U relativnom uvozu, morate dodati točku (.) Prije naziva modula pri uvozu pomoću iz .
Proći će 2 razdoblja (...) prije naziva modula ako je modul na jednoj razini više od trenutnog mjesta.
Pozivajući se na gore spomenutu sliku mape, imamo sljedeće module s njihovom funkcijom na koje se moramo pozvati.
- U module1.py postoji funkcija koja se naziva myfunc1.
- U module2.py postoji funkcija koja se naziva myfunc2.
- U module3.py postoji funkcija koja se naziva myfunc3.
- U module4.py postoji funkcija koja se naziva myfunc4.
Za rad s funkcijom myfunc1 morat ćete uvesti kako slijedi:
from .module1 import myfunc1
Da biste radili s funkcijom myfunc3, morat ćete uvesti kako slijedi:
from .subpkg.module3 import myfunc3
Prednosti relativnog uvoza
Prednosti:
- Lako je raditi s relativnim uvozom.
- S trenutnog mjesta uvoz se može skratiti u odnosu na apsolutni uvoz.
Mane relativnog uvoza
Mane:
- Korištenjem relativnog uvoza teško je pratiti gdje se kôd nalazi
Sažetak:
- Uvoz u Python pomaže vam da se uputite na kôd, tj. .Funkcije / objekte koji su zapisani u drugoj datoteci. Također se koristi za uvoz python biblioteka / paketa koji se instaliraju pomoću pip-a (upravitelj paketa python), a zatim ih trebate koristiti u svom kodu.
- Funkcija uvoza dostupna je na drugim jezicima kao što su typecript, JavaScript, java, ruby itd.
- Modul je python je kôd napisan unutar datoteke, na primjer (test.py). Unutar datoteke možete definirati svoje varijable, funkcije ili razred. Cijela datoteka postaje modul i može se uvesti u drugu datoteku koja se odnosi na kôd.
- Pomoću funkcionalnosti modula možete razbiti svoj kôd u različite datoteke, umjesto da pišete sve unutar jedne datoteke. Kasnije, koristeći uvoz, možete se pozvati na kôd unutar datoteke koja vam treba.
- Python ima ugrađene module, a također se vanjske knjižnice / paketi instalirani pomoću upravitelja paketa python (pip), npr. Pande, NumPy, itd. Nazivaju se modulima.
- Možete uvesti samo mali dio modula, tj. Samo potrebne funkcije i nazive varijabli iz modula, umjesto uvoza cijelog koda.
- Također možete pretvoriti naziv modula u kraći oblik dajući mu zamjensko ime. Zamjenski naziv može se izvršiti pomoću ključne riječi.
- Paket je direktorij u kojem su definirani svi moduli. Da bi se Python tumač ponašao prema njemu kao prema paketu, vaš direktorij trebao bi imati __init.pyfile. Init.py čini direktorij kao paket. Evo izgleda paketa na kojem ćemo raditi.
- Tijekom izvršavanja, kada python naiđe na ime modula za uvoz , tumač pokušava pronaći modul. Pretražuje modul na popisu ugrađenih modula. Kasnije, sve direktorije definirane unutar sys.path.
- Za apsolutni uvoz, morate dodati cijelu stazu vašeg modula izravno iz korijenske mape projekta.
- U relativnom uvozu, modul koji se uvozi odnosi se na trenutno mjesto na kojem se nalazi izraz o uvozu.