Простой Python. Современный стиль программирования (Любанович) - страница 76

Текст этой книги организован в иерархию: слова, предложения, абзацы и главы. В противном случае он стал бы нечитаемым спустя пару страниц. У кода имеется подобная организация: типы данных похожи на слова, операторы и выражения — это предложения, функции — это абзацы, а модули — это главы. Продолжу аналогию: когда я говорю, что что-то будет более подробно рассмотрено в главе 8, в программировании это было бы похоже на отсылку к коду другого модуля.

Мы ссылаемся на код других модулей с помощью оператора import. Оно позволяет получить доступ к коду и переменным этого модуля из вашей программы.

Импортируем модуль

Простейший вариант использования оператора import выглядит как import модуль, где модуль — это имя другого файла Python без расширения. py. Симулируем работу метеостанции и выведем на экран отчет о погоде. Основная программа выведет на экран отчет, а отдельный модуль, содержащий одну функцию, вернет описание погоды, которое будет использовано в отчете.

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

>····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(), и мы не вызовем ее по ошибке.