Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 106

на экран отчет, а отдельный модуль, содержащий одну функцию, вернет описание

погоды, которое будет использовано в отчете.

Основная программа выглядит так (назовем ее 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)