Що таке модулі в Python?
Модуль - це файл із кодом python. Код може мати форму визначених змінних, функцій або класу. Ім'я файлу стає ім'ям модуля.
Наприклад, якщо ваше ім'я файлу - guru99.py, ім'я модуля буде guru99 . За допомогою функціональних можливостей модуля ви можете розбити свій код на різні файли, замість того, щоб писати все всередині одного файлу.
У цьому підручнику ви дізнаєтесь:
- Що таке модулі в Python?
- Модуль імпорту Python
- Як створити та імпортувати модуль у Python?
- Імпортування класу в Python
- Використання модуля імпорту від
- Імпорт всього з модуля
- Використання модуля імпорту
- Використання імпорту *
- Функція dir ()
- Пакети
- PythonModuleSearchPath
- Використання псевдоніма модуля при імпорті
- Абсолютний та відносний імпорт у Python
- Використання Абсолютного Імпорту
- ВикористанняRelativeImports
Що таке модуль імпорту Python?
Файл розглядається як модуль у python. Для використання модуля вам потрібно імпортувати його за допомогою ключового слова import . Функцію або змінні, що знаходяться всередині файлу, можна використовувати в іншому файлі, імпортуючи модуль. Ця функціональність доступна іншими мовами, такими як машинопис, JavaScript, Java, ruby тощо.
Як створити та імпортувати модуль у Python?
Тепер ми створимо модуль та імпортуємо його в інший файл.
Ось потік створення та імпорту модуля, як показано на скріншоті:
Виконайте кроки, наведені для створення модуля в python.
Структура папок, яка використовується для тестування коду, така:
modtest/test.pydisplay.py
Крок 1) Створіть файл і назвіть його test.py
Крок 2) Усередині test.py створіть функцію, яка називається display_message ()
Def display_message():return "Welcome to Guru99 Tutorials!"
Крок 3) Тепер створіть ще один файл display.py.
Крок 4) Усередині display.py імпортуйте файл moduletest.py, як показано нижче:
import test
Під час імпортування не потрібно згадувати test.py, а лише ім’я файлу.
Крок 5)
Тоді ви можете викликати функцію display_message () з test.py всередині display.py, вам потрібно скористатися ім'ям_модуля.функція_назви.
Наприклад test.display_message ().
Import testprint(test.display_message())
Крок 6)
Після запуску display.py ви отримаєте такий результат:
Welcome to Guru99 Tutorials!
Імпортування класу в Python
Раніше ми бачили простий модуль з функцією. Тут буде створено клас і буде посилатися на клас всередині іншого файлу.
Структура папок для тестування коду така:
myproj/Car.pydisplay.py
Створіть файл Car.py з таким кодом:
Ім'я файлу: 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)
У файлі Car.py є атрибути brand_name, model та manu_year. Функціями, визначеними всередині класу, є car_details (), get_Car_brand (), get_Car_model ().
Давайте тепер використаємо файл Car.py як модуль в іншому файлі, який називається display.py.
Ім'я файлу: 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())
Вихід:
BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5
Тож ми можемо отримати доступ до всіх змінних та функцій із Car.py за допомогою модуля Car.
Використання модуля імпорту від
Ви можете імпортувати лише невелику частину модуля, тобто лише необхідні функції та імена змінних із модуля, замість того, щоб імпортувати повний код.
Коли ви хочете імпортувати лише певні речі, ви можете скористатися ключовим словом "з", щоб імпортувати те, що ви хочете.
Отже, синтаксис є
from module import your function_name , variables,… etc.
Структура папок, яка використовується для тестування коду, така:
modtest/test.pydisplay.py
У test.py є 2 функції, як показано:
Ім'я файлу: test.py
defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Тепер вам потрібна функція display_message (). До функції або змінної, яку ви імпортуєте, можна отримати прямий доступ, як показано нижче:
Ім'я файлу: display.py
from test import display_messageprint(display_message())
Вихід:
Welcome to Guru99 Tutorials!
Тепер, якщо ви випадково використовуєте функцію display_message1 (), вона видасть помилку, що функція не визначена, як показано нижче:
from test import display_messageprint(display_message1())
Вихід:
Traceback (most recent call last):File "display.py", line 3, inprint(display_message1())Name Error: name 'display_message1' is not defined
Імпорт всього з модуля
Імпорт дозволяє імпортувати повний модуль, використовуючи імпорт, за яким слід ім'я модуля, тобто ім'я файлу або бібліотека, яка буде використовуватися.
Синтаксис:
Import module
Або за допомогою
from module import *
Структура папок, яка використовується для тестування коду, така:
modtest/test.pydisplay.py
Нижче наведено деталі коду в test.py
my_name = "Guru99"my_address = "Mumbai"defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Використання модуля імпорту
Використовуючи лише ім’я імпорту модуля, щоб посилатися на змінні та функції всередині модуля, йому слід вводити префікс до імені модуля.
Приклад
Ім'я файлу: display.py
Import testprint(test.display_message())print(test.display_message1())print(test.my_name)print(test.my_address)
Тест імені модуля використовується для посилання на функцію та змінні всередині тесту модуля.
Вихід:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Використання імпорту *
Давайте подивимось приклад за допомогою import * . За допомогою імпорту * функції та змінні є безпосередньо доступними, як показано в прикладі нижче:
from test import *print(display_message())print(display_message1())print(my_name)print(my_address)
Вихід:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Функція dir ()
Dir () - це вбудована функція в python. Dir () повертає всі властивості та методи, включаючи вбудовані властивості даного об'єкта.
Отже, коли в модулі використовується dir (), він надасть вам змінні, функції, які присутні всередині модуля.
Ось робочий приклад dir () для модуля. У нас є клас Car.py, дозвольте імпортувати Car та призначити dir (), щоб побачити результати.
Структура папок для тестування коду буде такою:
test prop/Car.pytest.py
Ім'я файлу: 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)
Ім'я файлу: test.py
import Carclass_contents = dir(Car)print(class_contents)
Вихідні дані дають нам назву класу та всіх функцій, визначених у Car.py.
Ви також можете спробувати використовувати dir () на вбудованому модулі, доступному в Python. Спробуємо те саме на модулі json, як показано в прикладі нижче. Він відобразить всі властивості та методи, доступні в модулі json .
Import jsonjson_details = dir(json)print(json_details)
Вихід:
['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']
Пакети
Пакет - це каталог із усіма модулями, визначеними всередині нього. Щоб інтерпретатор Python розглядав його як пакет, ваш каталог повинен мати файл init.pyfile. Init.py робить каталог як пакет. Ось макет пакету, над яким ми збираємось працювати.
Назва пакету - мій пакет . Щоб розпочати роботу з пакетом, створіть каталог з назвою package /. Всередині каталогу створіть порожній файл із назвою __init__.py. Створіть ще 3 файли module1.py, module2.py та module3.py та визначте функції, як показано на скріншоті. Ось деталі модулів1.py, module2.py та 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")
Пакет S готовий до використання. Тепер зателефонуйте пакунку всередині будь-якого вашого файлу, як показано нижче: test.py:
Тут файл mypackage.module1 імпортується і отримує псевдонім як mod1. Так само ви можете використовувати інші модулі module2.py та module3.py з мого пакету.
import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())
Вихід:
Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None
Щойно ми продемонстрували пакет із простим модулем із функціями всередині нього. Відповідно до вашого проекту, ви також можете упакувати з наявними підпакетами. Вкладені папки / мають модулі з визначеними класами.
Шлях пошуку модуля Python
Під час виконання, коли python стикається з ім'ям модуля імпорту , інтерпретатор намагається знайти модуль. Він здійснює пошук модуля у списку вбудованих модулів. Пізніше, каталоги, визначені всередині sys.path.
Підводячи підсумок, інтерпретатор виконує такий пошук, щоб знайти модуль:
- У поточному каталозі.
- В у списку вбудованих модулів
- Усередині каталогів sys.path
Ви можете отримати деталі sys.path, імпортувавши модуль sys і роздрукувавши sys.path. Він надасть вам список каталогів, як показано нижче:
importsysprint(sys.path)
Вихід:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\DLLs']
Ви також можете змінити шлях та зберегти каталоги відповідно до ваших вимог.
Використання псевдоніма модуля при імпорті
Ви також можете перетворити ім'я модуля в коротшу форму, вказавши йому псевдонім. Псевдонім можна зробити за допомогою ключового слова.
Синтаксис:
import filename as alias name
Структура папок для тестування коду буде такою:
Mod test/test.pydisplay.py
Далі наведено код всередині test.py
my_name = "Guru99"my_address = "Mumbai"def display_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Тепер буде використовувати псевдонім для test.py в display.py
Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)
Псевдонім, який використовується для тестового модуля, - t. Тож на функцію та змінні з test.py можна посилатись, використовуючи псевдонім t.
Вихід:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Абсолютний та відносний імпорт у Python
Тепер ви знаєте, як імпортувати файл як модуль всередині іншого файлу. Давайте тепер подивимося, як керувати файлами, доступними в папках. Файли в папках можна імпортувати, використовуючи абсолютний або відносний імпорт.
Вважайте, що у вас є структура папок проекту, як показано нижче:
Коренева папка - це мій проект /. Він має дві підпапки package1 і package2.
Папка package1 має два модулі, module1.py та module2.py.
Папка package2 має один клас myclass.py, підпакет subpkg з module3.py та останній module4.py.
- У module1.py є функція, яка називається myfunc1.
- У module2.py є функція, яка називається myfunc2.
- У module3.py є функція, яка називається myfunc3.
- У module4.py є функція, яка називається myfunc4.
Використання абсолютного імпорту
Для абсолютного імпорту вам потрібно додати весь шлях вашого модуля прямо з кореневої папки проекту.
Давайте тепер подивимося, як використовувати абсолютний імпорт для посилання на функції, присутні в кожному з модулів.
Для роботи з функцією myfunc1 вам потрібно імпортувати наступним чином:
from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()
Для роботи з функцією myfunc3 вам потрібно імпортувати наступним чином:
from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()
Переваги та недоліки використання абсолютного імпорту
Ось переваги використання абсолютного імпорту:
- Відстежувати модулі для перевірки коду стає легко.
- Простий у використанні та дуже простий.
- Якщо проект буде змінено на інший шлях, імпорт все одно залишиться незмінним.
Недоліки використання абсолютного імпорту
Ось недоліки використання абсолютного імпорту:
Недоліки:
- Шлях імпорту може бути дуже довгим у випадку, модулі вкладені, і якщо ім'я модулів довге.
Використання відносного імпорту
Розглядаючи ту саму структуру папок, згадану нижче, ми побачимо, як імпортувати ту саму за допомогою відносного імпорту.
При відносному імпорті модуль, який потрібно імпортувати, відносно поточного розташування, яке є місцем, де присутній оператор імпорту.
Синтаксис:
При відносному імпортуванні потрібно додати крапку (.) Перед назвою модуля під час імпорту з використанням з .
До назви модуля буде 2 крапки (…), якщо модуль знаходиться на одному рівні вище від поточного розташування.
Посилаючись на рисунок структури папок, згаданий вище, ми маємо наступні модулі з їх функцією, на які нам потрібно звернутися.
- У module1.py є функція, яка називається myfunc1.
- У module2.py є функція, яка називається myfunc2.
- У module3.py є функція, яка називається myfunc3.
- У module4.py є функція, яка називається myfunc4.
Для роботи з функцією myfunc1 вам потрібно імпортувати наступним чином:
from .module1 import myfunc1
Для роботи з функцією myfunc3 вам потрібно імпортувати наступним чином:
from .subpkg.module3 import myfunc3
Переваги відносного імпорту
Переваги:
- Працювати з відносним імпортом легко.
- Із поточного місцезнаходження імпорт можна скоротити порівняно з абсолютним імпортом.
Недоліки відносного імпорту
Недоліки:
- Використовуючи відносний імпорт, важко простежити, де знаходиться код
Короткий зміст:
- Імпорт у Python допомагає вам посилатися на код, тобто .functions / об’єкти, записані в інший файл. Він також використовується для імпорту бібліотек / пакетів python, які встановлюються за допомогою pip (менеджер пакунків python), і тоді вам потрібно використовувати в коді.
- Функція імпорту доступна іншими мовами, такими як машинопис, JavaScript, Java, ruby тощо.
- Модулем є python - це код, записаний всередині файлу, наприклад (test.py). Усередині вашого файлу ви можете визначити свої змінні, функції або свій клас. Весь файл стає модулем і може бути імпортований до іншого файлу для посилання на код.
- Завдяки функціональності модуля ви можете розбити свій код на різні файли, замість того, щоб писати все всередині одного файлу. Пізніше, використовуючи імпорт, ви можете звернутися до коду всередині потрібного файлу.
- Python має вбудовані модулі, а також зовнішні бібліотеки / пакети, встановлені за допомогою диспетчера пакетів python (pip), наприклад, pandas, NumPy тощо називаються модулями.
- Ви можете імпортувати лише невелику частину модуля, тобто лише необхідні функції та імена змінних з модуля, замість того, щоб імпортувати повний код.
- Ви також можете перетворити ім'я модуля в коротшу форму, вказавши йому псевдонім. Псевдонім можна зробити за допомогою ключового слова.
- Пакет - це каталог із усіма модулями, визначеними всередині нього. Щоб інтерпретатор Python розглядав його як пакет, ваш каталог повинен мати __init.pyfile. Init.py робить каталог як пакет. Ось макет пакету, над яким ми збираємось працювати.
- Під час виконання, коли python стикається з ім'ям модуля імпорту , інтерпретатор намагається знайти модуль. Він здійснює пошук модуля у списку вбудованих модулів. Пізніше, каталоги, визначені всередині sys.path.
- Для абсолютного імпорту вам потрібно додати весь шлях вашого модуля прямо з кореневої папки проекту.
- При відносному імпорті модуль, який потрібно імпортувати, відносно поточного розташування, яке є місцем, де присутній оператор імпорту.