Модули Python
По мере роста программы код может содержать множество строк. Вместо того чтобы помещать всё в один файл, мы можем использовать модули, чтобы разделить код по отдельным файлам в соответствии с его функциональностью. Это делает наш код организованным и более удобным для сопровождения.
Модуль — это файл, содержащий код для выполнения определённой задачи. Модуль может содержать переменные, функции, классы и т. д. Рассмотрим пример.
Создадим модуль. Введите следующее и сохраните как example.py.
# Python Module addition
def add(a, b):
result = a + b
return result
Здесь мы определили функцию add() внутри модуля с именем example. Функция принимает два числа и возвращает их сумму.
Импорт модулей в Python
Мы можем импортировать определения из одного модуля в другой модуль или в интерактивный интерпретатор Python.
Для этого используется ключевое слово import. Чтобы импортировать ранее определённый модуль example, мы вводим следующее в Python prompt:
import example
Это не импортирует имена функций, определённых в example, непосредственно в текущую таблицу символов. Импортируется только имя модуля example.
Используя имя модуля, мы можем обратиться к функции с помощью оператора точки .. Например:
example.add(4,5) # возвращает 9
Примечание
В Python есть множество стандартных модулей. Полный список стандартных модулей Python и их назначение можно посмотреть на странице официальной документации.
Стандартные модули импортируются так же, как и пользовательские.
Импорт модулей стандартной библиотеки Python
Стандартная библиотека Python содержит более 200 модулей. Мы можем импортировать модуль по мере необходимости.
Допустим, мы хотим получить значение pi. Сначала импортируем модуль math и используем math.pi. Например,
# импорт стандартного модуля math
import math
# используем math.pi для получения значения pi
print("The value of pi is", math.pi)
Вывод
The value of pi is 3.141592653589793
Импорт Python с переименованием
В Python мы также можем импортировать модуль, переименовав его. Например,
# импорт модуля с переименованием
import math as m
print(m.pi)
# Вывод: 3.141592653589793
Здесь мы переименовали модуль math в m. В некоторых случаях это экономит время при наборе кода.
Обратите внимание: имя math не распознаётся в нашей области видимости. Следовательно, math.pi некорректно, а m.pi — правильная реализация.
Инструкция from…import
Мы можем импортировать конкретные имена из модуля, не импортируя модуль целиком. Например,
# импортируем только pi из модуля math
from math import pi
print(pi)
# Вывод: 3.141592653589793
Здесь мы импортировали только атрибут pi из модуля math.
Импорт всех имён
В Python мы можем импортировать все имена (определения) из модуля с помощью следующей конструкции:
# импортируем все имена из стандартного модуля math
from math import *
print("The value of pi is", pi)
Здесь мы импортировали все определения из модуля math. Это включает все имена, видимые в нашей области видимости, кроме тех, что начинаются с символа подчёркивания (приватные определения).
Предупреждение
Импорт всего с помощью символа звёздочки (*) — не лучшая практика программирования. Это может привести к дублированию определений для идентификатора. Также это снижает читаемость кода.
Встроенная функция dir()
В Python мы можем использовать функцию dir() для вывода списка всех имён функций в модуле.
Например, ранее мы определили функцию add() в модуле example.
Мы можем использовать dir для модуля example следующим образом:
print(dir(example))
['__builtins__',
'__cached__',
'__doc__',
'__file__',
'__initializing__',
'__loader__',
'__name__',
'__package__',
'add']
Здесь мы видим отсортированный список имён (вместе с add). Все остальные имена, начинающиеся с символа подчёркивания, — это атрибуты Python по умолчанию, связанные с модулем (не определённые пользователем).
Например, атрибут __name__ содержит имя модуля.
import example
example.__name__
# Вывод: 'example'
Все имена, определённые в текущем пространстве имён, можно узнать с помощью функции dir() без аргументов.
a = 1
b = "hello"
import math
print(dir())
['__builtins__', '__doc__', '__name__', 'a', 'b', 'math', 'pyscripter']