В этом конспекте , да и не только, будет встречаться словосочетание "через точку". Так часто говорят для краткости.
Но для такой формы записи имён определений (module.name)
существует и официальный термин: квалифицированное имя от слова "квалифицировать" ("qualify").
Соответственно, "импорт модуля целиком" официально называется квалифицированным импортом.
В Python все строчки с import принято располагать в самом начале кода модуля.
Такой набор строчек называют "блок импортов",
синтаксически этот блок никак не выделен — всего лишь обычные строчки одна за другой.
Такая группировка нужна для удобства ра
Модули и импортирование
файл с кодом на Python называется модулем. Имя модуля соответствует имени файла,
поэтому файлы в Python принято называть в стиле "snake_case". Одни модули могут использовать содержимое других,
если импортируют эти другие модули с помощью инструкции import.
В Python импортировать модули можно несколькими способами:
- импортировать сам модуль
- импортировать отдельные определения из модуля
- импортировать всё содержимое модуля сразу
Импортирование модуля
Рассмотрим применение первого способа — импортирование модуля целиком.
Синтаксис импорта: import <имя_модуля (без суффикса ".py")>
После ключевого слова import указываем имя модуля (файла).
Но при этом суффикс .py в имени надо опустить.
К примеру, для модуля с именем my_module.py в инструкции импорта достаточно прописать my_module,
а полный вид инструкции будет таким: import my_module.
В модуле (файле) с именем greeting.py определим функцию say_hi и переменную name:
# file: greeting.py
def say_hi():
print('Hi!')
name = 'Bob'
А в модуле с именем main.py сделаем импорт содержимого модуля greeting.py:
# file: main.py
import greeting # заметьте, расширение ".py" не указывается!
print(greeting.name) # => Bob
greeting.say_hi() # => Hi!
Импортирование модуля в таком виде делает модуль доступным по имени — в данном случае это greeting.
К содержимому же модуля идёт обращение, как говорят, "через точку".
И конечно можно получить доступ к переменным (greeting.name),
и вызывать функции модуля (greeting.say_hi).
Импортирование отдельных определений
Синтаксис импорта: from <имя_модуля (без суффикса ".py")> import <список определений>.
Если нужна пара функций или переменных,
а имя модуля сложное и громозкое, то нам пригодиться следующий вариант использования инструкции import:
# file: main.py
from greeting import say_hi, name
print(name) # используем переменную
say_hi() # вызываем функцию
Здесь после ключевого слова from указано имя модуля,
а затем после ключевого слова 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))
Из кода видно, что:
- оба способа импорта использованы совместно,
- импортировать отдельные определения можно в несколько заходов,
- если модуль импортирован по имени, то "через точку" можно получить доступ и к тем определениям, которые уже явно импортированы.