Importuj moduł w Python z przykładami

W czym znajdują się moduły Python?

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 pliku to guru99.py, nazwą modułu będzie guru99. Dzięki funkcjom modułu możesz podzielić kod na różne pliki, zamiast zapisywać wszystko w jednym pliku.

Co to jest Python moduł importu?

Plik jest uważany za moduł w Pythonie. Aby skorzystać z modułu należy go zaimportować za pomocą import słowo kluczowe. Funkcję lub zmienne znajdujące się w pliku można wykorzystać w innym pliku, importując moduł. Ta funkcja jest dostępna w innych językach, takich jak maszynopis, JavaSkrypt, Java, Ruby, itp.

Jak utworzyć i zaimportować moduł w Python?

Teraz utworzymy moduł i zaimportujemy go w innym pliku.

Oto proces tworzenia i importowania modułu, jak pokazano na zrzucie ekranu:

Utwórz i zaimportuj moduł w Python

Postępuj zgodnie z instrukcjami, aby utworzyć moduł w Pythonie.

Struktura folderów używana do testowania kodu jest następująca:

modtest/
	test.py
	display.py	

Krok 1) Utwórz plik i nadaj mu nazwę 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 podawać pliku test.py, a jedynie nazwę pliku.

Krok 5) Następnie możesz wywołać funkcję display_message() z test.py wewnątrz display.py, musisz skorzystać z modułu nazwa_funkcji.nazwa_funkcji.

Na przykład test.display_message().

Import test
print(test.display_message())

Krok 6) Po uruchomieniu display.py otrzymasz następujący komunikat Wyjście:

Welcome to Guru99 Tutorials!

Importowanie klasy w Python

Wcześniej widzieliśmy prosty moduł z funkcją. Tutaj utworzymy klasę i odwołamy ją do innego pliku.

Struktura folderów do testowania kodu jest następująca:

myproj/
	Car.py
	display.py

Utwórz plik o nazwie Car.py, używając następującego kodu:

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_name
		self.model = model
		self.manu_year = manu_year

	def 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 wewnątrz klasy 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 Car
car_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())

Wyjście:

BMW
Car brand is  BMW
Car model is  Z5
Car manufacture year is  2020
Car brand is  BMW
Car model is  Z5

Dzięki temu możemy uzyskać dostęp do wszystkich zmiennych i funkcji z Car.py za pomocą modułu Car.

Użycie modułu from do importu

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 zaimportować tylko określone rzeczy, możesz użyć słowa kluczowego „z”, aby zaimportować to, co chcesz.

Taka jest składnia

from  module import your function_name , variables,... etc.

Struktura folderów używana do testowania kodu jest następująca:

modtest/
	test.py
	display.py	

W test.py znajdują się 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_message
print(display_message())

Wyjście:

Welcome to Guru99 Tutorials!

Teraz, jeśli zdarzy ci się użyć funkcji display_message1() , wyświetli się błąd, że funkcja nie jest zdefiniowana, jak pokazano poniżej:

from test import display_message
print(display_message1())

Wyjście:

Traceback (most recent call last):
File "display.py", line 3, in <module>
print(display_message1())
Name Error: name 'display_message1' is not defined

Importowanie wszystkiego z modułu

Import umożliwia zaimportowanie całego modułu poprzez użycie opcji import, po której następuje nazwa modułu, tj. nazwa pliku lub używana biblioteka.

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.py
	display.py	

Poniżej znajdują się szczegóły kodu wewnątrz pliku 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 nazwy modułu importu, aby odwołać się do zmiennych i funkcji wewnątrz modułu, musi ona być poprzedzona nazwą modułu.

Przykład

Nazwa pliku: display.py

Import test
print(test.display_message())
print(test.display_message1())
print(test.my_name)
print(test.my_address)

Test nazwy modułu używany jest w odniesieniu do funkcji i zmiennych wewnątrz testu modułu.

Wyjście:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Korzystanie z importu *

Zobaczmy przykład użycia import *, Za pomocą import *, 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)

Wyjście:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Funkcja dir().

Dir() jest wbudowaną funkcją w Pythonie. Funkcja dir() zwraca wszystkie właściwości i metody, łącznie z właściwościami wbudowanymi danego obiektu.

Kiedy więc w module zostanie użyta funkcja dir(), wyświetli ona zmienne, czyli funkcje, które są obecne wewnątrz modułu.

Oto działający przykład dir() w module. Mamy klasę o nazwie Car.py, zaimportujmy Car i przypiszmy do dir(), aby zobaczyć wynik.

Struktura folderów do testowania kodu będzie następująca:

test prop/
	Car.py
	test.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_name
		self.model = model
		self.manu_year = manu_year

	def 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 Car

class_contents = dir(Car)
print(class_contents)

Dane wyjściowe dają nam nazwę klasy i wszystkie funkcje zdefiniowane w Car.py.

Możesz także spróbować użyć dir() na wbudowanym module dostępnym w Python. Spróbujmy tego samego json modułu, jak pokazano w przykładzie poniżej. Wyświetli wszystkie właściwości i metody dostępne w json moduł.

Import json
json_details = dir(json)
print(json_details)

Wyjście:

['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu
iltins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__pac
kage__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_en
coder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'loa
d', 'loads', 'scanner']

Pakiety

Pakiet to katalog zawierający wszystkie zdefiniowane w nim moduły. Aby zrobić Python interpreter traktuje to jako pakiet, w twoim katalogu powinien znajdować się plik init.py. Init.py tworzy katalog jako pakiet. Oto układ pakietu, nad którym będziemy pracować.

Pakiety w Python

Nazwa pakietu to moja paczka. Aby rozpocząć pracę z pakietem, utwórz katalog o nazwie package/. Wewnątrz katalogu utwórz pusty plik o nazwie __init__.py. Utwórz 3 kolejne 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

moduł1.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")

moduł2.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")

moduł3.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")

Kolekcja pakietjest gotowy do użycia. Teraz wywołaj pakiet w dowolnym pliku, jak pokazano poniżej :test.py:

W tym przypadku plik mypackage.module1 jest importowany i otrzymuje nazwę aliasu jako mod1. Podobnie możesz użyć innych modułów module2.py i module3.py z mojego pakietu.

import mypackage.module1 as mod1

print(mod1.mod1_func1())
print(mod1.mod1_func2())
print(mod1.mod1_func2())

Wyjście:

Welcome to Module1 function1
None
Welcome to Module1 function2
None
Welcome to Module1 function2
None

Właśnie zademonstrowaliśmy pakiet zawierający prosty moduł z zawartymi w nim funkcjami. Zgodnie z projektem możesz także pakować za pomocą podpakietów. Podfoldery/ posiadające moduły ze zdefiniowanymi klasami.

Python Ścieżka wyszukiwania modułu

Podczas wykonywania, gdy napotkany jest Python nazwa modułu importu, interpreter próbuje zlokalizować moduł. Przeszukuje moduł na liście modułów wbudowanych. Later w sumie katalogi zdefiniowane w sys.path.

Podsumowując, interpreter wykonuje następujące wyszukiwanie w celu zlokalizowania modułu:

  1. W bieżącym katalogu.
  2. Na liście modułów wbudowanych
  3. Wewnątrz katalogów sys.path

Możesz uzyskać szczegóły sys.path, importując moduł sys i drukując sys.path. Otrzymasz listę katalogów, jak pokazano poniżej:

importsys
print(sys.path)

Wyjście:

['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\
\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P
ython37\\DLLs']

Możesz także zmodyfikować ścieżkę i zachować katalogi zgodnie ze swoimi wymaganiami.

Używanie aliasu modułu w imporcie

Możesz także 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 testowania kodu będzie następująca:

Mod test/
	test.py
	display.py	

Poniżej znajduje się kod wewnątrz pliku 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 t

print(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 funkcję i zmienne z test.py można odwoływać się za pomocą aliasu t.

Wyjście:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Bezwzględny i względny import w Python

Teraz wiesz, jak zaimportować plik jako moduł w innym pliku. Zobaczmy teraz, jak zarządzać plikami dostępnymi w folderach. Pliki w folderach można importować przy użyciu importu bezwzględnego lub względnego.

Rozważmy, że masz strukturę folderów projektu, jak pokazano poniżej:

Bezwzględny i względny import w Python

Folder główny to mój projekt/. Zawiera dwa podfoldery: pakiet1 i pakiet2.

Folder pakiet1 zawiera dwa moduły, moduł1.py i moduł2.py.

Folder package2 zawiera jedną klasę myclass.py, podpakiet podpakietu z modułem3.py i ostatni moduł4.py.

  • W module1.py znajduje się funkcja o nazwie myfunc1.
  • 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 musisz dodać całą ścieżkę modułu bezpośrednio z folderu głównego projektu.

Zobaczmy teraz, jak wykorzystać import bezwzględny w odniesieniu do funkcji obecnych w każdym z modułów.

Aby pracować z funkcjąmyfunc1, musisz zaimportować w następujący sposób:

from package1.module1  import  myfunc1
or
from package1 import module1
module1.myfunc1()  

Aby pracować z funkcją myfunc3, musisz zaimportować w następujący sposób:

from package1.subpkg.module3  import  myfunc3
or
from package1.subpkg import module3
module3.myfunc3()  

Zalety i wady stosowania importu bezwzględnego

Oto zalety stosowania importu bezwzględnego:

  • Śledzenie modułów w celu sprawdzenia kodu staje się łatwe.
  • Łatwy w użyciu i bardzo prosty.
  • Jeśli projekt zostanie przeniesiony na inną ścieżkę, import pozostanie taki sam.

Wady stosowania importu bezwzględnego

Oto wady stosowania 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ć ją za pomocą importu względnego.

W przypadku importu względnego moduł, który ma zostać zaimportowany, jest określany względem bieżącej lokalizacji, czyli lokalizacji, w której znajduje się instrukcja importu.

Składnia

W przypadku importu względnego należy dodać kropkę (.) przed nazwą modułu podczas importu za pomocą od.

Będą to 2 kropki (..) przed nazwą modułu, jeśli moduł znajduje się o jeden poziom wyżej od bieżącej lokalizacji.

Odnosząc się do powyższego rysunku struktury folderów, mamy następujące moduły wraz z ich funkcjami, do których musimy się odwołać.

  • W module1.py znajduje się funkcja o nazwie myfunc1.
  • 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 funkcją myfunc1, 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 względnego importu

Zalety:

  • Łatwo jest pracować z importem względnym.
  • Z obecnej lokalizacji import może zostać skrócony w stosunku do importu bezwzględnego.

Wady importu względnego

Niedogodności:

  • Używając importu względnego, trudno jest prześledzić, gdzie znajduje się kod

Podsumowanie

  • Importuj w Python pomaga ci odwołać się do kodu, tj. .functions/objects, które są zapisane w innym pliku. Jest również używany do importowania bibliotek/pakietów Pythona, które są instalowane za pomocą pip (menedżera pakietów Pythona), a następnie musisz ich użyć w swoim kodzie.
  • Funkcja importu jest dostępna w innych językach, takich jak maszynopis, JavaSkrypt, Java, Ruby, itp.
  • Moduł to python to kod zapisany w pliku, na przykład (test.py). Wewnątrz pliku możesz zdefiniować 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 funkcjom modułu możesz podzielić kod na różne pliki, zamiast zapisywać wszystko w jednym pliku. Later, używając importu, możesz odwołać się do kodu znajdującego się w potrzebnym pliku.
  • Python ma wbudowane moduły, a także zewnętrzne biblioteki/pakiety instalowane za pomocą pliku Menedżer pakietów Pythona (pip), np. pandy, NumPy itp. nazywane są modułami.
  • Zamiast importować cały kod, możesz zaimportować tylko niewielką część modułu, czyli tylko wymagane funkcje i nazwy zmiennych z modułu.
  • Możesz także przekonwertować nazwę modułu na krótszą formę, nadając jej alias. Alias ​​można utworzyć za pomocą słowa kluczowego.
  • Pakiet to katalog zawierający wszystkie zdefiniowane w nim moduły. Aby zrobić Python interpreter traktuje to jako pakiet, w katalogu powinien znajdować się plik __init.py. Init.py tworzy katalog jako pakiet. Oto układ pakietu, nad którym będziemy pracować.
  • Podczas wykonywania, gdy napotkany jest Python nazwa modułu importu, interpreter próbuje zlokalizować moduł. Przeszukuje moduł na liście modułów wbudowanych. Later w sumie katalogi zdefiniowane w sys.path.
  • W przypadku importu bezwzględnego musisz dodać całą ścieżkę modułu bezpośrednio z folderu głównego projektu.
  • W przypadku importu względnego moduł, który ma zostać zaimportowany, jest określany względem bieżącej lokalizacji, czyli lokalizacji, w której znajduje się instrukcja importu.