Программы на Python содержат тысячи, десятки тысяч и сотни тысяч строк кода (есть проекты с миллионами). В таких условиях одним файлом с кодом не обойдёшься — его нужно разбивать на части. Для получения доступа к коду, который находится в других файлах, в Python реализован механизм модулей.

Модули и импортирование

Итак, файл с кодом на Python называется модулем. Имя модуля соответствует имени файла, поэтому файлы в Python принято называть в стиле "snakecase" (отметьте иронию: Python — питон — змея — snake — snakecase). Одни модули могут использовать содержимое других, если импортируют эти другие модули с помощью инструкции import. Пример:

# file: greeting.py
def say_hi():
    print('Hi!')

name = 'Bob'

# file: main.py
import greeting  # заметьте, расширение ".py" не указывается!

print(greeting.name) # => Bob
greeting.say_hi()    # => Hi!

Импортирование модуля в таком виде делает модуль доступным по имени — в данном случае это greeting. К содержимому же модуля можно обратиться, как говорят, "через точку". Причём можно как получить доступ к переменным (greeting.name), так и вызывать функции модуля (greeting.say_hi).

Строго говоря, в Python импортировать модули можно несколькими способами:

  1. импортировать сам модуль
  2. импортировать отдельные определения из модуля
  3. импортировать всё содержимое модуля сразу

Выше мы как раз рассмотрели применение первого способа — импортирование модуля целиком. Главное удобство упоминания модуля по имени: глядя на код, мы сразу видим, что используемая переменная или вызываемая функция — это часть модуля.

Импортирование отдельных определений

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

# file: main.py
from greeting import say_hi, name

print(name)  # используем переменную
say_hi()     # вызываем функцию

Здесь после ключевого слова from указано имя модуля, а затем после ключевого слова import — имена определений из этого модуля, которые мы в дальнейшем хотим использовать напрямую (а не "через точку").

В следующем уроке мы рассмотрим третий вариант импортирования модуля ("импорт всего содержимого") и в целом немного углубим наши познания в этой теме.

Для продолжения нужно перейти в курс и вступить в него.