Wat zijn de modules in Python?
Een module is een bestand met python-code. De code kan de vorm hebben van variabelen, functies of gedefinieerde klassen. De bestandsnaam wordt de modulenaam.
Als uw bestandsnaam bijvoorbeeld guru99.py is, is de modulenaam guru99 . Met modulefunctionaliteit kunt u uw code opsplitsen in verschillende bestanden in plaats van alles in één bestand te schrijven.
In deze tutorial leer je:
- Wat zijn de modules in Python?
- Python-importmodule
- Hoe maak en importeer ik een module in Python?
- Een klasse importeren in Python
- Gebruik van om module te importeren
- Alles importeren vanuit module
- Met behulp van de importmodule
- Met behulp van import *
- De dir () functie
- Pakketjes
- PythonModuleSearchPath
- Module-alias gebruiken bij het importeren
- Absolute en relatieve import in Python
- AbsoluteImports gebruiken
- MetRelativeImports
Wat is de Python-importmodule?
Een bestand wordt in python als een module beschouwd. Om de module te gebruiken, moet u deze importeren met het import- trefwoord. De functie of variabelen die in het bestand aanwezig zijn, kunnen in een ander bestand worden gebruikt door de module te importeren. Deze functionaliteit is beschikbaar in andere talen, zoals typoscript, JavaScript, java, ruby, enz.
Hoe maak en importeer ik een module in Python?
Nu gaan we een module maken en deze in een ander bestand importeren.
Hier is de stroom om de module te maken en te importeren, zoals weergegeven in de schermafbeelding:
Volg de gegeven stappen om een module in python te maken.
De mappenstructuur die wordt gebruikt om de code te testen, is als volgt:
modtest/test.pydisplay.py
Stap 1) Maak een bestand en noem het test.py
Stap 2) Maak binnen test.py een functie genaamd display_message ()
Def display_message():return "Welcome to Guru99 Tutorials!"
Stap 3) Maak nu een ander bestand display.py.
Stap 4) Importeer in display.py het bestand moduletest.py, zoals hieronder weergegeven:
import test
Bij het importeren hoeft u niet de test.py te vermelden, maar alleen de naam van het bestand.
Stap5)
Dan kun je de functie display_message () aanroepen vanuit test.py in display.py, je moet gebruik maken van module_name.function_name.
Bijvoorbeeld test.display_message ().
Import testprint(test.display_message())
Stap 6)
Wanneer u display.py uitvoert, krijgt u de volgende uitvoer:
Welcome to Guru99 Tutorials!
Een klasse importeren in Python
Eerder zagen we een simpele module met een functie. Hier zal een klasse worden gemaakt en de klasse naar een ander bestand worden verwezen.
De mappenstructuur om de code te testen is als volgt:
myproj/Car.pydisplay.py
Maak een bestand met de naam Car.py met de volgende code:
Bestandsnaam: 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)
In het bestand Car.py staan de attributen merknaam, model en manu_jaar. De functies die binnen de klasse zijn gedefinieerd, zijn car_details (), get_Car_brand (), get_Car_model ().
Laten we nu het bestand Car.py gebruiken als een module in een ander bestand genaamd display.py.
Bestandsnaam: 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())
Uitgang:
BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5
We hebben dus toegang tot alle variabelen en functies van Car.py met behulp van de Car-module.
Gebruik van om module te importeren
U kunt slechts een klein deel van de module importeren, dwz alleen de vereiste functies en variabelenamen uit de module in plaats van de volledige code te importeren.
Als u alleen specifieke dingen wilt importeren, kunt u het trefwoord "van" gebruiken om te importeren wat u wilt.
Dus de syntaxis is
from module import your function_name , variables,… etc.
De mappenstructuur die wordt gebruikt om de code te testen, is als volgt:
modtest/test.pydisplay.py
In test.py zijn er 2 functies zoals getoond:
Bestandsnaam: test.py
defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Nu wil je de functie display_message (). De functie of variabele die u importeert, kan rechtstreeks worden geopend, zoals hieronder wordt weergegeven:
Bestandsnaam: display.py
from test import display_messageprint(display_message())
Uitgang:
Welcome to Guru99 Tutorials!
Als je nu toevallig de functie display_message1 () gebruikt, zal het een foutmelding geven dat de functie niet is gedefinieerd zoals hieronder getoond:
from test import display_messageprint(display_message1())
Uitgang:
Traceback (most recent call last):File "display.py", line 3, inprint(display_message1())Name Error: name 'display_message1' is not defined
Alles importeren uit de module
Met Importeren kunt u de volledige module importeren door gebruik te maken van import gevolgd door modulenaam, dwz de bestandsnaam of de bibliotheek die moet worden gebruikt.
Syntaxis:
Import module
Of door gebruik te maken van
from module import *
De mappenstructuur die wordt gebruikt om de code te testen, is als volgt:
modtest/test.pydisplay.py
Hieronder volgen de codedetails in test.py
my_name = "Guru99"my_address = "Mumbai"defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Met behulp van de importmodule
Door alleen de module naam te importeren, om naar de variabelen en functies in de module te verwijzen, moet het voorvoegsel zijn met de naam van de module.
Voorbeeld
Bestandsnaam: display.py
Import testprint(test.display_message())print(test.display_message1())print(test.my_name)print(test.my_address)
De modulenaamtest wordt gebruikt om te verwijzen naar de functie en variabelen binnen de moduletest.
Uitgang:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Met behulp van import *
Laten we een voorbeeld bekijken met import * . Met import * zijn de functies en variabelen direct toegankelijk, zoals in onderstaand voorbeeld wordt getoond:
from test import *print(display_message())print(display_message1())print(my_name)print(my_address)
Uitgang:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
De dir () functie
De dir () is een ingebouwde functie in python. De dir () retourneert alle eigenschappen en methoden, inclusief de ingebouwde eigenschappen van het gegeven object.
Dus als dir () op de module wordt gebruikt, geeft het je de variabelen, functies die aanwezig zijn in de module.
Hier is een werkend voorbeeld van dir () op een module. We hebben een klasse genaamd Car.py, laten we Car importeren en toewijzen aan dir () om de uitvoer te zien.
De mapstructuur om de code te testen is als volgt:
test prop/Car.pytest.py
Bestandsnaam: 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)
Bestandsnaam: test.py
import Carclass_contents = dir(Car)print(class_contents)
De uitvoer geeft ons de naam van de klasse en alle functies die zijn gedefinieerd in Car.py.
U kunt ook proberen dir () te gebruiken op een ingebouwde module die beschikbaar is in Python. Laten we hetzelfde proberen op de json- module, zoals weergegeven in het onderstaande voorbeeld. Het toont alle eigenschappen en methoden die beschikbaar zijn in de json- module.
Import jsonjson_details = dir(json)print(json_details)
Uitgang:
['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']
Pakketjes
Een pakket is een map waarin alle modules zijn gedefinieerd. Om ervoor te zorgen dat een Python-interpreter het als een pakket behandelt, moet je directory het init.pyfile hebben. De init.py maakt de map als een pakket. Hier is de lay-out van het pakket waar we aan gaan werken.
De naam van het pakket is mijn pakket . Om met het pakket te gaan werken, maakt u een map met de naam pakket /. Maak in de directory een leeg bestand met de naam __init__.py. Maak nog 3 bestanden module1.py, module2.py en module3.py en definieer de functies zoals weergegeven in de schermafbeelding. Hier zijn de details van module1.py, module2.py en 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")
Het pakket is klaar voor gebruik. Roep nu het pakket in een van uw bestanden aan, zoals hieronder wordt weergegeven: test.py:
Hier wordt het mijnpakket.module1 geïmporteerd en krijgt het een aliasnaam als mod1. Evenzo kunt u andere modules module2.py en module3.py uit mijn pakket gebruiken.
import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())
Uitgang:
Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None
We hebben zojuist het pakket gedemonstreerd met een eenvoudige module met functies erin. Volgens uw project kunt u ook pakketten met subpakketten hebben. Submappen / modules met gedefinieerde klassen.
Zoekpad voor Python-module
Tijdens de uitvoering, wanneer python de naam van de importmodule tegenkomt , probeert de interpreter de module te lokaliseren. Het doorzoekt de module in de lijst met ingebouwde modules. Later met al zijn de mappen die zijn gedefinieerd in sys.path.
Samenvattend voert de tolk de volgende zoekopdracht uit om de module te vinden:
- In uw huidige directory.
- In in de lijst met ingebouwde modules
- Binnen de sys.path-mappen
U kunt de details van sys.path verkrijgen door de sys-module te importeren en het sys.path af te drukken. Het geeft u de lijst met mappen zoals hieronder weergegeven:
importsysprint(sys.path)
Uitgang:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\DLLs']
U kunt ook het pad wijzigen en de mappen behouden volgens uw vereisten.
Module-alias gebruiken bij het importeren
U kunt de modulenaam ook naar een kortere vorm converteren door er een aliasnaam aan te geven. De alias kan worden gedaan met behulp van het trefwoord.
Syntaxis:
import filename as alias name
De mapstructuur om de code te testen is als volgt:
Mod test/test.pydisplay.py
Hieronder volgt de code in test.py
my_name = "Guru99"my_address = "Mumbai"def display_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Gebruikt nu een alias voor test.py in display.py
Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)
De alias die wordt gebruikt voor de testmodule is t. Dus de functie en variabelen uit test.py kunnen worden verwezen met de alias t.
Uitgang:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Absolute en relatieve import in Python
U weet nu hoe u een bestand als module in een ander bestand kunt importeren. Laten we nu eens kijken hoe we de bestanden in mappen kunnen beheren. De bestanden in de mappen kunnen worden geïmporteerd door middel van absolute of relatieve import.
Bedenk dat u de structuur van uw projectmap heeft, zoals hieronder weergegeven:
De hoofdmap is mijn project /. Het heeft twee submappen pakket1 en pakket2.
De map package1 heeft twee modules, module1.py en module2.py.
De map package2 heeft één klasse myclass.py, een subpakket subpkg met module3.py en de laatste module4.py.
- In module1.py is er een functie genaamd myfunc1.
- In module2.py is er een functie genaamd myfunc2.
- In module3.py is er een functie genaamd myfunc3.
- In module4.py is er een functie genaamd myfunc4.
Absolute import gebruiken
Voor absolute invoer moet u het volledige pad van uw module rechtstreeks vanuit de hoofdmap van het project toevoegen.
Laten we nu eens kijken hoe we gebruik kunnen maken van absolute invoer om te verwijzen naar de functies die in elk van de modules aanwezig zijn.
Om met de functie myfunc1 te werken, moet u als volgt importeren:
from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()
Om met de functie myfunc3 te werken, moet u als volgt importeren:
from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()
Voordelen en nadelen van het gebruik van absolute invoer
Dit zijn de voordelen van het gebruik van absolute invoer:
- Het wordt gemakkelijk om de modules te traceren voor codecontrole.
- Makkelijk te gebruiken en heel eenvoudig.
- Als het project naar een ander pad wordt verplaatst, blijft de invoer hetzelfde.
Nadelen van het gebruik van absolute invoer
Hier zijn de nadelen van het gebruik van absolute invoer:
Nadelen:
- Het importpad kan erg lang worden in het geval dat de modules genest zijn en als de naam van de modules lang is.
Relatieve import gebruiken
Gezien dezelfde mapstructuur die hieronder wordt vermeld, zullen we zien hoe u deze kunt importeren met relatieve import.
Bij relatieve import is de te importeren module relatief ten opzichte van de huidige locatie, dat is de locatie waar de importverklaring aanwezig is.
Syntaxis:
Bij relatieve import moet u een punt (.) Voor de modulenaam toevoegen wanneer u importeert met from .
Het zal 2 punten (…) voor de modulenaam staan als de module zich een niveau hoger bevindt dan de huidige locatie.
Verwijzend naar de hierboven genoemde mapstructuurfiguur, hebben we de volgende modules met hun functie, waarnaar we moeten verwijzen.
- In module1.py is er een functie genaamd myfunc1.
- In module2.py is er een functie genaamd myfunc2.
- In module3.py is er een functie genaamd myfunc3.
- In module4.py is er een functie genaamd myfunc4.
Om met de functie myfunc1 te werken, moet u als volgt importeren:
from .module1 import myfunc1
Om met de functie myfunc3 te werken, moet u als volgt importeren:
from .subpkg.module3 import myfunc3
Voordelen van relatieve invoer
Voordelen:
- Het is gemakkelijk om met relatieve invoer te werken.
- Vanaf de huidige locatie kan de invoer worden verkort ten opzichte van de absolute invoer.
Nadelen van relatieve invoer
Nadelen:
- Met behulp van relatieve import is het moeilijk te achterhalen waar de code zich bevindt
Overzicht:
- Importeren in Python helpt je om naar de code te verwijzen, dwz .functies / objecten die in een ander bestand zijn geschreven. Het wordt ook gebruikt om python-bibliotheken / -pakketten te importeren die zijn geïnstalleerd met pip (python-pakketbeheerder), en je moet deze vervolgens in je code gebruiken.
- Importfunctionaliteit is beschikbaar in andere talen zoals typoscript, JavaScript, java, ruby, enz.
- Een module is python is de code die in het bestand is geschreven, bijvoorbeeld (test.py). In uw bestand kunt u uw variabelen, functies of uw klasse hebben gedefinieerd. Het volledige bestand wordt een module en kan in een ander bestand worden geïmporteerd om naar de code te verwijzen.
- Met modulefunctionaliteit kunt u uw code opsplitsen in verschillende bestanden in plaats van alles in één bestand te schrijven. Later kunt u met behulp van importeren verwijzen naar de code in het bestand dat u nodig heeft.
- Python heeft zijn ingebouwde modules, en ook externe bibliotheken / pakketten die zijn geïnstalleerd met behulp van een Python-pakketbeheerder (pip), bijvoorbeeld panda's, NumPy, enz. Worden modules genoemd.
- U kunt slechts een klein deel van de module importeren, dwz alleen de vereiste functies en variabelenamen uit de module in plaats van de volledige code te importeren.
- U kunt de modulenaam ook naar een kortere vorm converteren door er een aliasnaam aan te geven. De alias kan worden gedaan met behulp van het trefwoord.
- Een pakket is een map waarin alle modules zijn gedefinieerd. Om ervoor te zorgen dat een Python-interpreter het als een pakket behandelt, moet je directory de __init.pyfile hebben. De init.py maakt de map als een pakket. Hier is de lay-out van het pakket waar we aan gaan werken.
- Tijdens de uitvoering, wanneer python de naam van de importmodule tegenkomt , probeert de interpreter de module te lokaliseren. Het doorzoekt de module in de lijst met ingebouwde modules. Later met al zijn de mappen die zijn gedefinieerd in sys.path.
- Voor absolute invoer moet u het volledige pad van uw module rechtstreeks vanuit de hoofdmap van het project toevoegen.
- Bij relatieve import is de te importeren module relatief ten opzichte van de huidige locatie, dat is de locatie waar de importverklaring aanwezig is.