Зарегистрируйтесь, чтобы продолжить обучение

Модули поглубже Основы Python

В предыдущем уроке мы рассмотрели два вида импорта в языке Python: можно импортировать модуль целиком или отдельные его определения. Здесь мы продолжим знакомиться с модулями, но для начала обсудим терминологию. Во время импорта всего модуля можно обращаться к нему «через точку». Вспомним, как выглядит такая запись: module.name.

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

Стоит отметить, что в Python все строчки с import принято располагать в самом начале кода модуля. Такой набор строчек часто называют блоком импортов, хотя синтаксически этот блок никак не выделен — это обычные строчки одна за другой. Эта группировка повышает читаемость кода: так разработчикам проще искать ошибки в коде и исправлять их.

Импорт всего содержимого модуля

Рассмотрим третий вариант — импорт всего содержимого модуля. Так он выглядит в коде:

from some_module import *
from another_module import *

Здесь из модулей some_module и another_module неявно импортируются все определения. Такой способ импорта дает доступ к десяткам переменных, констант и функций, причем можно не указывать названия содержимого из всего модуля. Эта особенность отличает импорт содержимого от импорта модуля целиком — и она же может усложнять чтение кода.

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

Именно поэтому в большинстве руководств по написанию кода на Python повторяется один и тот же совет: «Как можно реже пользуйтесь импортом всего содержимого». Тем не менее в реальном коде такие импорты встречаются, поэтому было важно упомянуть этот вариант.

Сочетание способов импорта

В предыдущем уроке говорилось об импорте модуля целиком и импорте отдельных определений. Чтобы углубить знания, рассмотрим еще один способ — сочетание импорта целиком и отдельными определениями в рамках одного и того же модуля.

Рассмотрим пример. В модуле computation.py определим функцию и переменные:

PI = 3.1415926
E = 2.7182818


def pi_times(x: float) -> float:
    return x * PI

А в модуле main.py воспользуемся двумя способами импорта из модуля computation.py:

# file: main.py
import computation
from computation import PI, E
from computation import pi_times


print(PI)
print(computation.E)
print(pi_times(2))
print(computation.pi_times(E))

Из примеров выше видно, что можно:

  • Использовать оба способа импорта одновременно
  • Импортировать отдельные определения в несколько заходов
  • Получать доступ «через точку» к определениям, которые уже импортированы по имени

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff