В предыдущем уроке мы рассмотрели два вида импорта в языке Python: можно импортировать модуль целиком или отдельные его определения. Здесь мы продолжим знакомиться с модулями, но для начала обсудим терминологию. Во время импорта всего модуля можно обращаться к нему «через точку». Вспомним, как выглядит такая запись: module.name
.
Для такой формы записи существует и более официальный термин — квалифицированное имя. Соответственно, импорт модуля целиком из прошлого урока официально называется квалифицированным импортом.
Стоит отметить, что в Python все строчки с import
принято располагать в самом начале кода модуля. Такой набор строчек часто называют «блоком импортов», хотя синтаксически этот блок никак не выделен — это обычные строчки одна за другой. Эта группировка повышает читабельность кода: так разработчикам проще искать ошибки в коде и отлаживать их.
Рассмотрим третий вариант — импорт всего содержимого модуля. Так он выглядит в коде:
from some_module import *
from another_module import *
Здесь из модулей some_module
и another_module
неявно импортируются все определения. Импорт таким способом дает доступ к десяткам переменных, констант и функций, причем можно не указывать название всего модуля. Эта особенность отличает импорт содержимого от импорта модуля целиком — и она же может вызывать проблемы с читабельностью.
Посмотрим на примере. Представим программиста, который читает чужой код с импортом содержимого. В какой-то момент он встречает название незнакомой переменной и хочет узнать, откуда она взялась. Не получится просто внимательно посмотреть на блок импортов или сделать поиск по коду — названия всех импортированных определений скрываются за *
.
Именно поэтому в большинстве руководств по написанию кода на Python повторяется один и тот же совет: «Как можно реже пользуйтесь импортом всего содержимого». Тем не менее в реальном коде такие импорты встречаются, поэтому было важно упомянуть этот вариант.
В предыдущем уроке говорилось об импорте модуля целиком и через отдельные определения. Чтобы углубить знания, рассмотрим еще один способ — сочетание импорта целиком и отдельными определениями в рамках одного и того же модуля.
Рассмотрим пример. В модуле computation.py
определим функцию и переменные:
# file: computation.py
PI = 3.1415926
E = 2.7182818
def pi_times(x):
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))
Из примеров выше видно, что можно:
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт