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

и ZIP-архив, хранящийся в стандартном модуле sys, как переменную path. Вы мо-

жете получить доступ к этому списку и изменить его. Вот так выглядит значение

переменной sys.path в Python 3.3 в моей версии операционной системы Mac:

>>> import sys

>>> for place in sys.path:

... print(place)

...

/Library/Frameworks/Python.framework/Versions/3.3/lib/python33.zip

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/plat-darwin

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/lib-dynload

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages

Пустое место в начале вывода содержит в себе строку '', которая символизиру-

ет текущий каталог. Если строка '' находится первой в sys.path, Python сначала

выполнит поиск в текущем каталоге, когда вы попробуете что-то импортировать:

import report выглядит как report.py.

Будет использован первый найденный модуль. Это означает, что, если вы опре-

делите модуль с именем random и он будет найден раньше оригинального модуля,

вы не получите доступ к стандартной библиотеке random.

Пакеты

Мы перешли от отдельных строк кода к функциям, отдельным программам и мо-

дулям, располагающимся в одной папке. Чтобы сделать еще один шаг, вы можете

организовать модули в иерархии файлов, которые называются пакетами.

Возможно, нам нужны разные типы прогнозов погоды: на следующий день

и следующую неделю. В качестве одного из вариантов мы можем создать папку

с именем sources, а внутри нее — два модуля: daily.py и weekly.py. Каждый из них

содержит функцию forecast. Версия на каждый день возвращает строку, а версия

на каждую неделю — список из семи строк.

Рассмотрим основную программу и два модуля. (Функция enumerate() разбива-

ет список на части и отправляет каждый элемент списка в цикл for, добавляя

к каждому элементу число в качестве небольшого бонуса.)

Стандартная библиотека Python

147

Основная программа — boxes/weather.py:

from sources import daily, weekly

print("Daily forecast:", daily.forecast())

print("Weekly forecast:")

for number, outlook in enumerate(weekly.forecast(), 1):

print(number, outlook)

Модуль 1: boxes/sources/daily.py.

def forecast():

'fake daily forecast'

return 'like yesterday'

Модуль 2: boxes/sources/weekly.py.

def forecast():

"""Fake weekly forecast"""

return ['snow', 'more snow', 'sleet',

'freezing rain', 'rain', 'fog', 'hail']

В папке sources вам понадобится иметь кое-что еще — файл с именем __init__.py.

Он может быть пустым, но Python он нужен для того, чтобы считать папку, которая