Во втором случае мы находимся внутри функции и знаем, что существует только одна функция с именем choice, поэтому импортируем функцию choice() непосредственно из модуля random. Мы могли бы написать функцию как следующий сниппет, который возвращает случайный результат:
>def get_description():
>····import random
>····possibilities = ['rain', 'snow', 'sleet', 'fog', 'sun', 'who knows']
>····return random.choice(possibilities)
Как и для многих других аспектов программирования, выбирайте стиль, который кажется вам наиболее прозрачным. Имя функции, перед которым стоит имя модуля (random.choice), использовать безопаснее, однако из-за этого придется набирать немного больше текста.
Эти примеры применения функции get_description() продемонстрировали варианты того, что можно импортировать, но не показали, где следует выполнять импортирование, — в них import вызывался изнутри функции. Мы могли бы импортировать random из другой функции:
>>>> import random
>>>> def get_description():
>…····possibilities = ['rain', 'snow', 'sleet', 'fog', 'sun', 'who knows']
>…····return random.choice(possibilities)
>…
>>>> get_description()
>'who knows'
>>>> get_description()
>'rain'
Вам следует рассмотреть возможность импортировать код вне функции, если импортируемый код может быть использован более одного раза, и изнутри функции, если вы знаете, что использование кода будет ограничено. Некоторые люди предпочитают размещать все операторы import в верхней части файла, чтобы явно обозначить все зависимости их кода. Оба варианта работают.
Импортируем модуль с другим именем
В нашей основной программе weatherman.py мы делали вызов import report. Но что, если у вас есть другой модуль с таким же именем или вы хотите использовать более короткое или простое имя? В такой ситуации можете выполнить импорт с помощью псевдонима. Используем псевдоним wr:
>import report as wr
>description = wr.get_description()
>print("Today's weather: ", description)
Импортируем только самое необходимое
С помощью Python вы можете импортировать одну или несколько частей модуля. Каждая часть может сохранить свое оригинальное имя, или же вы можете дать ей alias. Для начала импортируем функцию get_description() из модуля report с помощью его оригинального имени:
>from report import get_description
>description = get_description()
>print("Today's weather: ", description)
Теперь импортируем ее как do_it:
>from report import get_description as do_it
>description = do_it()
>print("Today's weather: ", description)