Найти тему
Калинкин

Как написать пользовательский модуль на Python

Оглавление
Пользовательский модуль на Python
Пользовательский модуль на Python

Вам интересно, как вы можете написать свой собственный пользовательский модуль на Python, подобный известным библиотекам Python, таким как NumPy или Pandas?

В этой статье мы исследуем, что такое пользовательский модуль Python и как написать модуль на Python. Давайте пожалуй приступим к разбору.

Что такое пользовательский модуль в Python?

Модуль - это программный файл Python, состоящий из определений или кода, которые вы можете использовать в других программных файлах Python. Это .py файлы, написанные на Python.

Вы можете написать модуль Python самостоятельно. Они могут содержать определения функций, классов и переменных, которые могут использоваться в других программах на Python.

Зачем писать пользовательский модуль на Python?

Написание пользовательских модулей на Python полезно для разбиения больших частей программы на более мелкие, более управляемые и организованные файлы. Это также повышает возможность повторного использования кода и является отличным применением принципа DRY (Don’t Repeat Yourself).

Например, вместо того, чтобы копировать и вставлять функции, которые мы используем, в разные программы снова и снова, мы можем хранить их в пользовательском модуле Python и импортировать по мере необходимости.

Как написать пользовательский модуль на Python

Давайте рассмотрим краткий пример, написав модуль с именем circle_area. Он сохраняется как circle_area.py и содержит функцию для вычисления площади окружности:

# circle_area.py
# Определяем функцию
def area_of_circle(r):
pi = 3.14
area = pi * (r * r)
return area

Затем мы открываем другой файл под названием main.py в котором мы запускаем нашу функцию, вот так:

# main.py
# Импортируем модуль circle_area
import circle_area
# Вызываем функцию
print("Area of circle = %.6f" % circle_area.area_of_circle(7))

Поскольку мы ссылаемся на модуль, нам нужно вызвать функцию, сославшись на имя модуля в точечной нотации.

Когда мы запускаем main.py скрипт в консоли, мы получаем следующий вывод:

Area of circle = 153.860000

В приведенном выше примере мы импортировали весь модуль целиком. В качестве альтернативы, мы могли бы импортировать только функции, необходимые для нашей программы. В этом случае мы бы импортировали только area_of_circle() метод как:

from circle_area import area_of_circle

Мы также можем импортировать модуль, переименовав его:

import circle_area as ca

Это может сэкономить время набора текста. Сокращения часто становятся стандартной практикой в отрасли; например, NumPy библиотека часто импортируется как np.

Мы также можем импортировать все определения из модуля с символом звездочки (*), например:

from circle_area import *

Однако это не очень хорошая практика программирования, поскольку это может привести к дублированию определений и сделать код менее читаемым.

Мы также можем определять переменные внутри модуля и вызывать их из нашего основного скрипта. Например, я обновил предыдущий circle_area.py модуль путем добавления переменной с именем coolpy:

# circle_area.py
# Определяем функцию
def area_of_circle(r):
pi = 3.14
area = pi * (r * r)
return area
# Определяем переменную
coolpy = "https://dzen.ru/kalinkin is cool!"

Затем мы печатаем его из нашего main.py файл:

# Импортируйте модуль circle_area
import circle_area
# Вызовите функцию
print("Area of circle = %.6f" % circle_area.area_of_circle(7))
# Выведите переменную
print(circle_area.coolpy)

Это даст нам следующий результат:

Area of circle = 153.860000
https://dzen.ru/kalinkin is cool!

Опираясь на статью о том, как написать пользовательский класс на Python, мы также можем добавлять классы в наш пользовательский модуль Python. Для наглядности я создал новый модуль, сохраненный как pypok.py, который содержит Pokemon класс, который я использовал ранее:

# pypok.py
# Определите класс
class Pokemon:
def __init__(self, power, level, names):
self.power = power
self.level = level
self.names = names
def __repr__(self):
return (f'Pokemon({self.power}, '
f'{self.level}, '
f'{self.names})')
def total_damage(self):
return self.damage(self.power, self.level)
@staticmethod
def damage(power, level):
return (power * level * 2) / 50

Теперь мы добавим класс в main.py. Чтобы скрипт запускался без ошибок, мне нужно импортировать мой новый pypok модуль.

# main.py
# Импортируйте модули circle_area и pypok
import circle_area
import pypok
# Вызовите функцию
print("Area of circle = %.6f" % circle_area.area_of_circle(7))
# Выведите переменную
print(circle_area.coolpy)
# Вызовите класс
squirtle = pypok.Pokemon(20, 8, "Squirtle")
print("Squirtle inflicts", squirtle.total_damage(), "points of damage!")

Запускаем наш main.py скрипт возвращает следующий вывод:

Area of circle = 153.860000
https://dzen.ru/kalinkin is cool!
Squirtle inflicts 6.4 points of damage!

Как только мы вызовем пользовательский класс, определенный ранее, мы сможем получить доступ к функциям и атрибутам класса в main.py пространство имен файла.

Хотя мы можем писать пользовательские модули для определения функций, мы также можем писать их для реализации кода.

# circle_area.py
# Определите функцию
def area_of_circle(r):
pi = 3.14
area = pi * (r * r)
return area
# Вызовите функцию внутри модуля
print(area_of_circle(7))

Мы обновляем main.py скрипт, удалив все, кроме строки импорта модуля:

# main.py
# Импортируйте модуль circle_area
import circle_area

Теперь мы можем запустить скрипт и получить следующий результат:

153.86

Как вы можете видеть, одна строка импорта в нашем main.py для получения выходных данных достаточно файла. Хотя это действительно работает, вам следует избегать подобных решений. Импорт не должен делать ничего большего, чем сообщать Python о новых объектах. В конце концов, вы же не хотите выполнять сложные вычисления до того, как они понадобятся.

Лучше сохранить модули как можно более общими, чтобы сделать их многоразовыми и избежать повторений. Переменные, относящиеся к конкретному проекту, должны храниться в общем файле, например main.py.

Пишите пользовательские модули на Python!

Я надеюсь, что эта статья дала вам хорошее представление о том, как написать модуль на Python. Не стесняйтесь поиграть с приведенными выше фрагментами и написать свои собственные модули.

Кроме того, я призываю вас поразмыслить над своей практикой программирования. Какие функции или классы вы часто используете? Хорошей практикой может быть хранение их в вашем пользовательском модуле Python, чтобы сэкономить время и сделать ваш код более читаемым и простым в обслуживании.