Импорт стандартных и собственных модулей в Python

Стандартные и собственные модули в Python: создание, импорт с помощью import и from

Модуль — файл с расширением .py, который содержит код на языке Python.

А стандартный (встроенный) модуль — скомпилированный модуль, который написан на Си и встроен в интерпретатор Python.

Здесь мы разберемся, как импортировать и свои модули, и стандартные модули в свою программу. Начнем с импорта стандартных модулей.

Импорт модуля из стандартной библиотеки

Для того, чтобы подключить модуль нужно прописать ключевое слово import и далее название модуля (или название нескольких модулей через запятую):

import <модуль1>, <модуль2>, …, <модульN>

Список и описание всех стандартных модулей и библиотек можно найти в официальной документации Python.

После того, как мы импортировали модуль, его имя становится переменной и с его помощью мы можем обратиться к функциям модуля. Синтаксис будет выглядеть следующим образом:

<название модуля>.<название функции>

Рассмотрим в качестве примера импорт и работу с функциями стандартного модуля math:

import math

print(math.pi)
print(math.cos(1))
#3.141592653589793
#0.5403023058681397

Мы импортировали модуль math и вывели переменную pi, обратившись к этой переменной модуля math с помощью math.pi и далее вывели косинус 1 в радианах, точно также обратившись к функции cos с помощью math.cos(1).

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

К примеру, документация модуля math находится здесь.

Дзен в Python

Попробуйте импортировать модуль this:

import this

И увидите The Zen of Python, by Tim Peters)

Присвоение произвольного имени модулю

Если нужно по какой-либо причине изменить имя импортированного модуля, то это можно сделать с помощью такого синтаксиса:

import <название модуля> as <новое звание модуля>

Пример:

import math as m

print(m.pi)
print(m.cos(1))
#3.141592653589793
#0.5403023058681397

Теперь мы обращаемся к функциям модуля через переменную m, если обратимся по старому, то будет ошибка:

import math as m

print(math.pi)
print(math.cos(1))
#NameError: name 'math' is not defined

Импорт определенных объектов из модуля

Если мы пишем import <модуль>, то в нашу программу импортируются все функции и объекты, которые есть в модуле, но иногда этого не нужно. Мы можем импортировать только те объекты, которые нужны с помощью ключевого слова from.

Синтаксис выглядит следующим образом:

from <название модуля> import <объект>

Или так, если нужно импортировать несколько объектов:

from <название модуля> import <объект1>, <объект2>

Так как мы импортируем конкретные объекты, то обращаться к ним можно напрямую (без модуль.).

Например, импортируем из модуля math только pi и e:

from math import pi, e

print(pi)
print(e)
#3.141592653589793
#2.718281828459045

Также мы можем изменить имя объекта, задав ему псевдоним с помощью ключевого слова as:

from math import pi as my_pi, e as my_e

print(my_pi)
print(my_e)
#3.141592653589793
#2.718281828459045

С помощью синтаксиса:

from <название модуля> import *

Мы можем импортировать все объекты из модуля.

from math import *

print(pi)
print(e)
print(cos(1))
#3.141592653589793
#2.718281828459045
#0.5403023058681397

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

Лучше всегда стараться импортировать только, что будет использоваться в вашей программе.

Создание и импорт своего модуля

Как импортируются стандартные модули разобрались, теперь давайте попробуем сделать что-нибудь свое.

Давайте создадим файл (который и будет нашим модулем) mymodule.py в котором напишем, например, такие функции и добавим переменную:

pi = 3.14

def hello():
    print('Hello World!')
    
def my_max(a, b):
    return a if(a > b) else b

Здесь мы определили свою переменную pi, функцию hello, которая просто выводит текст Hello World! и функцию my_max, которая возвращает максимальное число из двух полученных чисел.

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

В main.py мы импортируем наш модуль и выполним функции из модуля:

import mymodule

print(mymodule.pi)
mymodule.hello()
print(mymodule.my_max(1, 10))
#3.14
#Hello World!
#10

В итоге мы получили то, что ожидали, из нашего модуля мы вывели переменную pi, функцию hello и нашли максимальное число с помощью функции my_max.

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

from mymodule import hello

hello()
#Hello World!
import mymodule as my

print(my.pi)
my.hello()
print(my.my_max(1, 10))
#3.14
#Hello World!
#10

Импорт своего модуля из другой папки

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

Например, создадим рядом с нашей программой main.py папку mod, в которую поместим наш модуль mymodule.py, т.е. структура будет следующей:

main.py
      /mod/mymodule.py

Работать с модулем нужно будет следующим образом, в файле main.py:

import mod.mymodule

print(mod.mymodule.pi)
mod.mymodule.hello()
print(mod.mymodule.my_max(1, 10))
#3.14
#Hello World!
#10

Функция dir(<модуль>)

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

Синтаксис функции:

dir(<имя модуля>)

Рассмотрим, на примере нашего модуля:

import mymodule

print(dir(mymodule))
#['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'hello', 'my_max', 'pi']

Здесь мы видим все импортированные из модуля объекты, наши функции, переменная и служебные переменные.

Содержание: