погоды, которое будет использовано в отчете.
Основная программа выглядит так (назовем ее weatherman.py):
import report
description = report.get_description()
print("Today's weather:", description)
А ее модуль (report.py) — так:
def get_description(): # смотрите строку документации
"""Return random weather, just like the pros"""
144
Глава 5. Py Boxes: модули, пакеты и программы
from random import choice
possibilities = ['rain', 'snow', 'sleet', 'fog', 'sun', 'who knows']
return choice(possibilities)
Если вы поместите оба этих файла в один каталог и укажете Python запустить
файл weatherman.py в качестве основной программы, он обратится к модулю report
и запустит его функцию get_description(). Мы написали эту версию функции
get_description() так, чтобы она возвращала случайную строку из списка, которую
выведет на экран основная программа:
$ python weatherman.py
Today's weather: who knows
$ python weatherman.py
Today's weather: sun
$ python weatherman.py
Today's weather: sleet
Мы использовали оператор import в двух местах.
В основной программе weatherman.py, импортируемой модулем report.
В файле модуля report.py функция get_description() импортирует функцию
choice из стандартного модуля Python random.
Мы также использовали эти операторы двумя разными способами.
Основная программа делала вызов import report и затем вызывала функцию
report.get_description().
Функция get_description() из модуля report.py содержит вызовы from random
import choice и choice(possibilities).
В первом случае мы импортировали модуль report целиком, при этом нам
нужно было добавить префикс report., чтобы вызвать функцию get_description().
После этого оператора import все содержимое файла report.py становится доступным
основной программе, нужно лишь ставить перед именем вызываемой функции
префикс report.. Путем уточнения содержимого модуля с помощью его имени
мы избегаем возникновения неприятных конфликтов именования. В каком-то
другом модуле также может быть функция get_descpirtion(), и мы не вызовем ее
по ошибке.
Во втором случае мы находимся внутри функции и знаем, что существует толь-
ко одна функция с именем choice, поэтому импортируем функцию choice() непо-
средственно из модуля random. Мы могли бы написать функцию как следующий
сниппет, который возвращает случайный результат:
def get_description():
import random
possibilities = ['rain', 'snow', 'sleet', 'fog', 'sun', 'who knows']
return random.choice(possibilities)