Для реальных приложений на рынке разработчики пишут сотни и тысячи строчек кода. Есть даже проекты, в которых несколько миллионов строчек. Подобный масштабный проект невозможно сохранить в одном файле, команда запутается в своем же коде, не сможет поддерживать и обновлять его. Поэтому файл с кодом нужно разбивать на части. Этот принцип применяется во многих языках программирования. В Python с этой целью используются модули.
В Python любой файл с кодом называется модулем — между этими терминами нет разницы. Чтобы всем Python-разработчикам было удобно читать готовый код, принято называть файлы в стиле snake_case: то есть с маленькой буквы и с разделением слов символом подчеркивания. Это легко запомнить: snake_case переводится как «змеиный регистр» и поэтому идеально сочетается с языком Python.
Как использовать модули
Работать с кодом в тысячи строчек намного проще, если он разбит на несколько модулей. В таком случае обычно работают с главным файлом, а отдельные функции помещают в разные модули. Затем модули импортируют в main.py с помощью ключевого слова import
. В итоге команда разработчиков получает код, который легко читать и обслуживать.
Чтобы попрактиковаться, попробуем создать свой модуль. Для этого мы создадим файл с названием greeting.py. Затем внутри этого файла определим функцию say_hi()
и переменную name
:
# file: greeting.py
def say_hi() -> None: # определяем функцию
print("Hi!")
name = "Bob" # определяем переменную
Модуль-приветствие готов: он умеет печатать строку Hi!
и обрабатывать переменную name
. Но от него нет никакой пользы, пока он не встроен в работу всей остальной программы. Чтобы воспользоваться нашим модулем, нужно импортировать его в главный модуль main.py.
Для этого в Python есть три способа:
- Импорт модуля целиком
- Импорт отдельных определений из модуля
- Импорт всего содержимого модуля сразу
Здесь мы рассмотрим только первый и второй способы, а третий обсудим подробно уже в следующем уроке.
Импорт модуля целиком
Это самый простой способ: используем ключевое слово import
вместе с названием файла без расширения .py. Перейдем в главный файл main.py и импортируем туда наш модуль greeting.py:
# file: main.py
import greeting
Импорт прошел успешно — у нас появился доступ к модулю-приветствию прямо из главного файла. Теперь к содержимому модуля можно обращаться «через точку». Так можно вызвать функцию модуля или отдельную переменную:
# вызываем функцию модуля
greeting.say_hi() # => Hi!
# выводим на экран отдельную переменную
print(greeting.name) # => Bob
Это самый распространенный способ, потому что такой код легко читать. Любой разработчик с первого взгляда может определить, что используемая переменная или вызываемая функция — это часть какого-то конкретного модуля.
Импорт отдельных определений
Иногда первый способ не подходит — например, из длинного и сложного модуля вам нужна всего пара функций или переменных. Тогда поможет второй способ импорта: нужно написать ключевое слово from
с названием модуля без расширения .py. Затем в той же строчке указываем ключевое слово import
с названиями определений, которые хотим использовать. Так это выглядит в коде:
# file: main.py
from greeting import say_hi, name # импортируем отдельные компоненты модуля
print(name) # используем импортированную переменную
say_hi() # вызываем импортированную функцию
Также при импорте можно указать новое название для импортируемого компонента с помощью ключевого слова as
# file: main.py
from greeting import say_hi as hello, name as first_name
print(first_name)
hello()
В следующем уроке мы глубже изучим эту тему и рассмотрим третий вариант импорта модуля.