156
Глава 8 •
Функции
Первый способ импортирования, при котором записывается команда
import
с име-
нем модуля, открывает доступ программе ко всем функциям из модуля:
имя_модуля
.
имя_функции
()
Импортирование конкретных функций
Также возможно импортировать конкретную функцию из модуля. Общий синтак-
сис выглядит так:
from
имя_модуля
import
имя_функции
Вы можете импортировать любое количество функций из модуля, разделив их
имена запятыми:
from
имя_модуля
import
функция
_0,
функция
_1,
функция
_2
Если ограничиться импортированием только той функции, которую вы намерева-
етесь
использовать, пример
making_pizzas .py
будет выглядеть так:
from pizza import make_pizza
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
При таком синтаксисе использовать точечную запись при вызове функции не обя-
зательно. Так как функция
make_pizza()
явно импортируется в команде
import
, при
использовании ее можно вызывать прямо по имени.
Назначение
псевдонима для функции
Если имя импортируемой функции может конфликтовать с именем существующей
функции или функция имеет слишком длинное имя, его можно заменить коротким
уникальным
псевдонимом
(alias) — альтернативным именем для функции. Псевдо-
ним назначается функции при импортировании.
В следующем примере функции
make_pizza()
назначается псевдоним
mp()
, для чего
при импортировании используется конструкция
make_pizza as mp
. Ключевое слово
as
переименовывает функцию, используя указанный псевдоним:
from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')
Команда
import
в этом примере назначает функции
make_pizza()
псевдоним
mp()
для этой программы. Каждый раз, когда потребуется вызвать
make_pizza()
, доста-
точно включить вызов
mp()
— Python выполнит код
make_pizza()
без конфликтов
с другой функцией
make_pizza()
, которую вы могли включить в этот файл про-
граммы.
Общий синтаксис назначения псевдонима выглядит так:
from
имя_модуля
import
имя_функции
as
псевдоним
Хранение функций в модулях
157
Назначение
псевдонима для модуля
Псевдоним также можно назначить для всего модуля. Назначение короткого
имени для модуля — скажем,
p
для
pizza
— позволит вам быстрее вызывать функ-
ции модуля. Вызов
p.make_pizza()
получается более компактным, чем
pizza.
make_pizza()
:
import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
Модулю
pizza
в команде
import
назначается псевдоним
p
, но все функции
модуля сохраняют свои исходные имена. Вызов функций в записи
p.make_
pizza()
не только компактнее
pizza.make_pizza()
; он также отвлекает внима-
ние от имени модуля и помогает сосредоточиться на содержательных именах
функций. Эти имена функций, четко показывающие, что делает каждая функ-
ция, важнее для удобочитаемости вашего кода, чем использование полного
имени модуля.
Общий синтаксис выглядит так:
import
имя_модуля
as
псевдоним
Импортирование
всех функций модуля
Также можно приказать Python импортировать каждую функцию в модуле;
для этого используется оператор
*
:
from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
Звездочка в команде
import
приказывает Python скопировать каждую функцию
из модуля
pizza
в файл программы. После импортирования всех функций вы
сможете вызывать каждую функцию по имени без точечной записи. Тем не менее
лучше не использовать этот способ с большими модулями, написанными дру-
гими разработчиками; если модуль содержит функцию, имя которой совпадает
с существующим именем из вашего проекта, возможны неожиданные результа-
ты. Python обнаруживает несколько функций или переменных с одинаковыми
именами, и вместо импортирования всех функций по отдельности происходит
замена этих функций.
В таких ситуациях лучше всего импортировать только нужную функцию или функ-
ции или же импортировать весь модуль с последующим применением точечной
записи. При этом создается чистый код, легко читаемый и понятный. Я включил
этот раздел только для того, чтобы вы понимали команды
import
вроде следующей,
когда вы встретите их в чужом коде:
from
имя_модуля
import *