Jakie są moduły w Pythonie?
Moduł to plik z kodem Pythona. Kod może mieć postać zmiennych, funkcji lub zdefiniowanej klasy. Nazwa pliku staje się nazwą modułu.
Na przykład, jeśli nazwa twojego pliku to guru99.py, nazwa modułu to guru99 . Dzięki funkcjonalności modułu możesz podzielić kod na różne pliki zamiast zapisywać wszystko w jednym pliku.
W tym samouczku dowiesz się:
- Jakie są moduły w Pythonie?
- Moduł importu Pythona
- Jak stworzyć i zaimportować moduł w Pythonie?
- Importowanie klasy w Pythonie
- Korzystanie z modułu from to import
- Importowanie wszystkiego z modułu
- Korzystanie z modułu importu
- Korzystanie z importu *
- Funkcja dir ()
- Pakiety
- PythonModuleSearchPath
- Używanie aliasu modułu w imporcie
- Importy bezwzględne i względne w Pythonie
- UsingAbsoluteImports
- UsingRelativeImports
Co to jest moduł importu Pythona?
Plik jest traktowany jako moduł w Pythonie. Aby skorzystać z modułu, musisz go zaimportować za pomocą słowa kluczowego import . Funkcja lub zmienne obecne w pliku mogą być użyte w innym pliku poprzez zaimportowanie modułu. Ta funkcja jest dostępna w innych językach, takich jak maszynopis, JavaScript, java, ruby itp.
Jak stworzyć i zaimportować moduł w Pythonie?
Teraz stworzymy moduł i zaimportujemy go do innego pliku.
Oto przepływ tworzenia i importowania modułu, jak pokazano na zrzucie ekranu:
Postępuj zgodnie z podanymi instrukcjami, aby utworzyć moduł w języku Python.
Struktura folderów używana do testowania kodu jest następująca:
modtest/test.pydisplay.py
Krok 1) Utwórz plik i nazwij go test.py
Krok 2) Wewnątrz test.py utwórz funkcję o nazwie display_message ()
Def display_message():return "Welcome to Guru99 Tutorials!"
Krok 3) Teraz utwórz kolejny plik display.py.
Krok 4) Wewnątrz display.py zaimportuj plik moduletest.py, jak pokazano poniżej:
import test
Podczas importowania nie musisz wspominać o pliku test.py, ale tylko o nazwie pliku.
Krok 5)
Następnie możesz wywołać funkcję display_message () z test.py wewnątrz display.py, musisz użyć modułu nazwa_modułu.nazwa_funkcji.
Na przykład test.display_message ().
Import testprint(test.display_message())
Krok 6)
Po uruchomieniu display.py otrzymasz następujące dane wyjściowe:
Welcome to Guru99 Tutorials!
Importowanie klasy w Pythonie
Wcześniej widzieliśmy prosty moduł z funkcją. Tutaj utworzy klasę i odsyła ją do innego pliku.
Struktura folderów do przetestowania kodu jest następująca:
myproj/Car.pydisplay.py
Utwórz plik o nazwie Car.py z następującym kodem:
Nazwa pliku: 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)
W pliku Car.py znajdują się atrybuty brand_name, model i manu_year. Funkcje zdefiniowane w klasie to car_details (), get_Car_brand (), get_Car_model ().
Użyjmy teraz pliku Car.py jako modułu w innym pliku o nazwie display.py.
Nazwa pliku: 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())
Wynik:
BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5
Dzięki temu możemy uzyskać dostęp do wszystkich zmiennych i funkcji z Car.py za pomocą modułu Car.
Korzystanie z modułu from to import
Możesz zaimportować tylko niewielką część modułu, tj. Tylko wymagane funkcje i nazwy zmiennych z modułu, zamiast importować cały kod.
Jeśli chcesz importować tylko określone rzeczy, możesz użyć słowa kluczowego „from”, aby zaimportować to, co chcesz.
Więc składnia jest taka
from module import your function_name , variables,… etc.
Struktura folderów używana do testowania kodu jest następująca:
modtest/test.pydisplay.py
W test.py są 2 funkcje, jak pokazano:
Nazwa pliku: test.py
defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Teraz potrzebujesz funkcji display_message (). Dostęp do funkcji lub zmiennej, którą importujesz, można uzyskać bezpośrednio, jak pokazano poniżej:
Nazwa pliku: display.py
from test import display_messageprint(display_message())
Wynik:
Welcome to Guru99 Tutorials!
Teraz, jeśli zdarzy ci się użyć funkcji display_message1 (), zgłosi błąd, że funkcja nie jest zdefiniowana, jak pokazano poniżej:
from test import display_messageprint(display_message1())
Wynik:
Traceback (most recent call last):File "display.py", line 3, inprint(display_message1())Name Error: name 'display_message1' is not defined
Importowanie wszystkiego z modułu
Import umożliwia zaimportowanie pełnego modułu poprzez użycie importu, po którym następuje nazwa modułu, tj. Nazwa pliku lub biblioteki, która ma być używana.
Składnia:
Import module
Lub używając
from module import *
Struktura folderów używana do testowania kodu jest następująca:
modtest/test.pydisplay.py
Poniżej znajdują się szczegóły kodu wewnątrz test.py
my_name = "Guru99"my_address = "Mumbai"defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Korzystanie z modułu importu
Używając po prostu importu nazwy modułu, aby odwołać się do zmiennych i funkcji wewnątrz modułu, musi on poprzedzić nazwę modułu.
Przykład
Nazwa pliku: display.py
Import testprint(test.display_message())print(test.display_message1())print(test.my_name)print(test.my_address)
Test nazwy modułu służy do odwoływania się do funkcji i zmiennych wewnątrz testu modułu.
Wynik:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Korzystanie z importu *
Zobaczmy przykład z importem * . Korzystając z importu * , funkcje i zmienne są bezpośrednio dostępne, jak pokazano w poniższym przykładzie:
from test import *print(display_message())print(display_message1())print(my_name)print(my_address)
Wynik:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Funkcja dir ()
Dir () to funkcja wbudowana w Pythonie. Dir () zwraca wszystkie właściwości i metody, w tym właściwości wbudowane danego obiektu.
Więc kiedy dir () jest używany w module, da ci zmienne, funkcje, które są obecne w module.
Oto działający przykład dir () na module. Mamy klasę o nazwie Car.py, zaimportujmy Car i przypiszmy ją do dir (), aby zobaczyć wynik.
Struktura folderów do przetestowania kodu będzie następująca:
test prop/Car.pytest.py
Nazwa pliku: 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)
Nazwa pliku: test.py
import Carclass_contents = dir(Car)print(class_contents)
Dane wyjściowe zawierają nazwę klasy i wszystkie funkcje zdefiniowane w Car.py.
Możesz także spróbować użyć dir () na wbudowanym module dostępnym w Pythonie. Spróbujmy tego samego na module json , jak pokazano w poniższym przykładzie. Wyświetli wszystkie właściwości i metody dostępne w module json .
Import jsonjson_details = dir(json)print(json_details)
Wynik:
['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']
Pakiety
Pakiet to katalog ze wszystkimi zdefiniowanymi w nim modułami. Aby interpreter Pythona traktował go jako pakiet, twój katalog powinien mieć plik init.pyfile. Init.py tworzy katalog jako pakiet. Oto układ pakietu, nad którym będziemy pracować.
Nazwa paczki to moja paczka . Aby rozpocząć pracę z pakietem, utwórz katalog o nazwie package /. W katalogu utwórz pusty plik o nazwie __init__.py. Utwórz jeszcze 3 pliki module1.py, module2.py i module3.py i zdefiniuj funkcje, jak pokazano na zrzucie ekranu. Oto szczegóły dotyczące 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")
Pakiet s gotowy do użytku. Teraz wywołaj pakiet w dowolnym pliku, jak pokazano poniżej: test.py:
Tutaj mypackage.module1 jest importowany i otrzymuje alias jako mod1. Podobnie możesz użyć innych modułów module2.py i module3.py z mojego pakietu.
import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())
Wynik:
Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None
Właśnie zademonstrowaliśmy pakiet z prostym modułem z zawartymi w nim funkcjami. Zgodnie z projektem możesz również spakować z pakietami podrzędnymi. Podfoldery / posiadające moduły ze zdefiniowanymi klasami.
Ścieżka wyszukiwania modułu Pythona
Podczas wykonywania, gdy python napotka nazwę modułu importu , interpreter próbuje zlokalizować moduł. Przeszukuje moduł na liście modułów wbudowanych. Później katalogi zdefiniowane w sys.path.
Podsumowując, interpreter przeprowadza następujące wyszukiwanie w celu zlokalizowania modułu:
- W Twoim bieżącym katalogu.
- Na liście modułów wbudowanych
- W katalogach sys.path
Możesz uzyskać szczegółowe informacje o sys.path, importując moduł sys i drukując sys.path. Wyświetli listę katalogów, jak pokazano poniżej:
importsysprint(sys.path)
Wynik:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\DLLs']
Możesz także zmodyfikować ścieżkę i zachować katalogi zgodnie z własnymi wymaganiami.
Używanie aliasu modułu w imporcie
Możesz również przekonwertować nazwę modułu na krótszą formę, nadając jej alias. Alias można utworzyć za pomocą słowa kluczowego.
Składnia:
import filename as alias name
Struktura folderów do przetestowania kodu będzie następująca:
Mod test/test.pydisplay.py
Poniżej znajduje się kod wewnątrz test.py
my_name = "Guru99"my_address = "Mumbai"def display_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Teraz użyje aliasu dla test.py w display.py
Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)
Alias używany dla modułu testowego to t. Zatem do funkcji i zmiennych z test.py można odwoływać się przy użyciu aliasu t.
Wynik:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Importy bezwzględne i względne w Pythonie
Wiesz już, jak zaimportować plik jako moduł do innego pliku. Zobaczmy teraz, jak zarządzać plikami dostępnymi w folderach. Pliki w folderach można importować za pomocą importu bezwzględnego lub względnego.
Rozważ, że masz strukturę folderów projektu, jak pokazano poniżej:
Folder główny to mój projekt /. Ma dwa podfoldery pakiet1 i pakiet2.
Folder package1 zawiera dwa moduły, module1.py i module2.py.
Folder pakiet2 ma jedną klasę myclass.py, pod-pakiet podrzędny z module3.py i ostatni moduł4.py.
- W module1.py znajduje się funkcja o nazwiemyfunc1.
- W module2.py znajduje się funkcja o nazwiemyfunc2.
- W module3.py znajduje się funkcja o nazwiemyfunc3.
- W module4.py znajduje się funkcja o nazwiemyfunc4.
Korzystanie z importu bezwzględnego
W przypadku importu bezwzględnego należy dodać całą ścieżkę modułu bezpośrednio z folderu głównego projektu.
Zobaczmy teraz, jak wykorzystać import absolutny, aby odwołać się do funkcji obecnych w każdym module.
Aby pracować z functionmyfunc1, musisz zaimportować w następujący sposób:
from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()
Aby pracować z funkcją myfunc3, musisz zaimportować w następujący sposób:
from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()
Zalety i wady korzystania z importu absolutnego
Oto zalety korzystania z importu bezwzględnego:
- Łatwo jest prześledzić moduły w celu sprawdzenia kodu.
- Łatwy w użyciu i bardzo prosty.
- Jeśli projekt zostanie przeniesiony na inną ścieżkę, import nadal pozostanie taki sam.
Wady stosowania importu bezwzględnego
Oto wady korzystania z importu bezwzględnego:
Niedogodności:
- Ścieżka importu może być bardzo długa w przypadku, gdy moduły są zagnieżdżone, a nazwa modułów jest długa.
Korzystanie z importu względnego
Biorąc pod uwagę tę samą strukturę folderów, o której mowa poniżej, zobaczymy, jak zaimportować to samo za pomocą importu względnego.
W przypadku importu względnego moduł do zaimportowania jest określany względem bieżącej lokalizacji, czyli lokalizacji, w której znajduje się instrukcja import.
Składnia:
W przypadku importu względnego należy dodać kropkę (.) Przed nazwą modułu podczas importowania przy użyciu z .
Będą to 2 kropki (…) przed nazwą modułu, jeśli moduł znajduje się o jeden poziom wyżej od bieżącej lokalizacji.
Nawiązując do wspomnianego powyżej rysunku struktury folderów, mamy następujące moduły wraz z ich funkcją, do których musimy się odwołać.
- W module1.py znajduje się funkcja o nazwiemyfunc1.
- W module2.py znajduje się funkcja o nazwiemyfunc2.
- W module3.py znajduje się funkcja o nazwiemyfunc3.
- W module4.py znajduje się funkcja o nazwiemyfunc4.
Aby pracować z functionmyfunc1, musisz zaimportować w następujący sposób:
from .module1 import myfunc1
Aby pracować z funkcją myfunc3, musisz zaimportować w następujący sposób:
from .subpkg.module3 import myfunc3
Zalety importu względnego
Zalety:
- Łatwo jest pracować ze względnym importem.
- Z obecnej lokalizacji import można skrócić w porównaniu z importem bezwzględnym.
Wady importu względnego
Niedogodności:
- Korzystając z importu względnego, trudno jest prześledzić, gdzie znajduje się kod
Podsumowanie:
- Import w Pythonie pomaga odwołać się do kodu, tj. Funkcji / obiektów, które są zapisane w innym pliku. Służy również do importowania bibliotek / pakietów Pythona, które są instalowane za pomocą pip (menedżera pakietów Pythona), a następnie należy ich użyć w kodzie.
- Funkcja importu jest dostępna w innych językach, takich jak maszynopis, JavaScript, java, ruby itp.
- Moduł to python to kod zapisany w pliku, na przykład (test.py). W pliku możesz zdefiniować swoje zmienne, funkcje lub klasę. Cały plik staje się modułem i można go zaimportować do innego pliku w celu odniesienia się do kodu.
- Dzięki funkcjonalności modułu możesz podzielić kod na różne pliki zamiast zapisywać wszystko w jednym pliku. Później, korzystając z importu, możesz odwołać się do kodu w pliku, którego potrzebujesz.
- Python ma swoje wbudowane moduły, a także zewnętrzne biblioteki / pakiety instalowane za pomocą menedżera pakietów Pythona (pip), np. Pandy, NumPy itp. Nazywane są modułami.
- Możesz zaimportować tylko niewielką część modułu, tj. Tylko wymagane funkcje i nazwy zmiennych z modułu zamiast importować cały kod.
- Możesz również przekonwertować nazwę modułu na krótszą formę, nadając jej alias. Alias można utworzyć za pomocą słowa kluczowego.
- Pakiet to katalog ze wszystkimi zdefiniowanymi w nim modułami. Aby interpreter Pythona traktował go jako pakiet, twój katalog powinien mieć plik __init.pyfile. Init.py tworzy katalog jako pakiet. Oto układ pakietu, nad którym będziemy pracować.
- Podczas wykonywania, gdy python napotka nazwę modułu importu , interpreter próbuje zlokalizować moduł. Przeszukuje moduł na liście modułów wbudowanych. Później katalogi zdefiniowane w sys.path.
- W przypadku importu bezwzględnego należy dodać całą ścieżkę modułu bezpośrednio z folderu głównego projektu.
- W przypadku importu względnego moduł do zaimportowania jest określany względem bieżącej lokalizacji, czyli lokalizacji, w której znajduje się instrukcja import.