Какие модули в Python?
Модуль - это файл с кодом Python. Код может быть в форме переменных, функций или определенных классов. Имя файла становится именем модуля.
Например, если ваше имя файла - guru99.py, имя модуля будет guru99 . Благодаря функциональности модуля вы можете разбить свой код на разные файлы вместо того, чтобы писать все в одном файле.
В этом руководстве вы узнаете:
- Какие модули в Python?
- Модуль импорта Python
- Как создать и импортировать модуль в Python?
- Импорт класса в Python
- Использование from для импорта модуля
- Импорт всего из модуля
- Использование модуля импорта
- Использование импорта *
- Функция dir ()
- Пакеты
- PythonModuleSearchPath
- Использование псевдонима модуля при импорте
- Абсолютный и относительный импорт в Python
- UsingAbsoluteImports
- UsingRelativeImports
Что такое модуль импорта 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, вам нужно использовать module_name.function_name.
Например 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 для импорта модуля
Вы можете импортировать только небольшую часть модуля, то есть только необходимые функции и имена переменных из модуля, вместо импорта полного кода.
Если вы хотите импортировать только определенные вещи, вы можете использовать ключевое слово «from», чтобы импортировать то, что вы хотите.
Итак, синтаксис
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, за которым следует имя модуля, т. Е. Имя файла или используемая библиотека.
Синтаксис:
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)
Имя модуля test используется для обозначения функции и переменных внутри модуля test.
Выход:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Использование импорта *
Давайте посмотрим на пример использования import * . Используя 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 и определите функции, как показано на снимке экрана. Вот подробности о module1.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()
Преимущества и недостатки использования абсолютного импорта
Вот преимущества использования абсолютного импорта:
- Становится легко отследить модули для проверки кода.
- Легко использовать и очень просто.
- Если проект перемещен на другой путь, импорт останется прежним.
Недостатки использования абсолютного импорта
Вот недостатки использования абсолютного импорта:
Недостатки:
- Путь импорта может быть очень длинным, если модули вложены друг в друга и если имена модулей длинны.
Использование относительного импорта
Учитывая ту же структуру папок, упомянутую ниже, мы увидим, как импортировать то же самое, используя относительный импорт.
При относительном импорте модуль, который нужно импортировать, привязан к текущему местоположению, то есть местоположению, в котором присутствует оператор импорта.
Синтаксис:
В относительном импорте вам необходимо добавить точку (.) Перед именем модуля при импорте с использованием from .
Перед именем модуля будет 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 помогает вам обращаться к коду, то есть к функциям / объектам, которые записаны в другом файле. Он также используется для импорта библиотек / пакетов python, которые устанавливаются с помощью pip (диспетчера пакетов python), которые затем необходимо использовать в своем коде.
- Функциональность импорта доступна на других языках, таких как машинописный текст, JavaScript, java, ruby и т. Д.
- Модуль python - это код, написанный внутри файла, например (test.py). Внутри вашего файла вы можете определить свои переменные, функции или класс. Весь файл становится модулем и может быть импортирован в другой файл для ссылки на код.
- Благодаря функциональности модуля вы можете разбить свой код на разные файлы вместо того, чтобы писать все в одном файле. Позже, используя импорт, вы можете обратиться к коду внутри нужного вам файла.
- Python имеет встроенные модули, а также внешние библиотеки / пакеты, установленные с помощью диспетчера пакетов Python (pip), например, pandas, NumPy и т. Д. Называются модулями.
- Вы можете импортировать только небольшую часть модуля, то есть только необходимые функции и имена переменных из модуля, вместо импорта полного кода.
- Вы также можете преобразовать имя модуля в более короткую форму, присвоив ему псевдоним. Псевдоним можно задать с помощью ключевого слова.
- Пакет - это каталог, в котором определены все модули. Чтобы интерпретатор Python обрабатывал его как пакет, в вашем каталоге должен быть файл __init.pyfile. Init.py делает каталог как пакет. Вот макет пакета, над которым мы будем работать.
- Во время выполнения, когда python встречает имя модуля импорта , интерпретатор пытается найти модуль. Он ищет модуль в списке встроенных модулей. Позже все каталоги, определенные внутри sys.path.
- Для абсолютного импорта вам необходимо добавить полный путь к вашему модулю прямо из корневой папки проекта.
- При относительном импорте модуль, который нужно импортировать, привязан к текущему местоположению, то есть местоположению, в котором присутствует оператор импорта.