Table Of ContentЭффективное объектно-ориентированное
программирование ох 4-
ва е
т и
ы з
Программирование на Python, том I ва д
е а
т н
P и
Вы овладели основами Python. Что дальше? Эта книга представляет собой подробное yt е
четвертое издание h
руководство по применению языка программирования в основных прикладных o
n
областях – системном администрировании, создании графических интерфейсов том I 3.Х
и веб-приложений. Исследуются приемы работы с базами данных, приемы програм- Программирование на
мирования сетевых взаимодействий, создания интерфейсов для сценариев, обра-
ботки текста и многие другие.
В книге кратко и ясно описываются синтаксис языка и методики разработки, вклю-
чено большое количество примеров, иллюстрирующих типичные идиомы програм- н П Python
мирования и корректное их применение. Кроме того, исследуется эффективность
Python в качестве инструмента разработки программного обеспечения, в отличие от а р
просто инструмента «создания сценариев». В четвертое издание включено описание
новых особенностей языка, биб лиотек и практических приемов программирования P о
для Python 3.X. Примеры, представленные в книге, опробованы под третьей альфа-
y г
версией Python 3.2.
t р
В первом томе рассматриваются следующие темы:
h
• Краткий обзор языка Python. Простой демонстрационный пример, иллюст- а
ри рующий приемы ООП, способы представления данных, сохранения объектов, o м
создания графических интерфейсов и основы веб-разработки.
n
• Системное программирование. Исследуются инструменты доступа к систем- м том I
ным интерфейсам и приемы создания сценариев командной строки, обработки
файлов и папок, параллельного выполнения программ и многие другие. и
• Программирование графических интерфейсов. Демонстрируется исполь-
р
зо вание библиотеки виджетов tkinter, входящей в состав стандартной библиотеки
Python, для создания законченных пользовательских интерфейсов.
о
«В этой книге вы найдете все – от приемов отладки до рекомендаций по проекти- в
рованию, что поможет вам решать масштабные задачи и обходить типичные
а
препятствия.»
Диана Донован (Diane Donovan), California Bookwatch
н
Марк Лутц (Mark Lutz) является ведущим специалистом в области обучения языку
и
Python. Вот уже 25 лет Марк занимается разработкой программного обеспечения
и является автором предыдущих изданий книги «Программирование на Python», е
а также книг «Изучаем Python» и «Python Pocket Reference», выпущенных издатель-
ством O’Reilly.
Категория: программирование Издательство «Символ-Плюс»
Уровень подготовки читателей: средний (812) 380-5007, (495) 638-5305 Л
у
т
ц
ISBN 978-5-93286-210-0
www.symbol.ru
Марк Лутц
9 785932 862100
Python_progr_cover_tom-1_PonD.indd 1 20.09.2011 17:06:32
По договору между издательством «Символ-Плюс» и Интернет-мага-
зином «Books.Ru – Книги России» единственный легальный способ
получения данного файла с книгой ISBN 978-5-93286-210-0, назва-
ние «Программирование на Python, том I, 4-е издание» – покупка в
Интернет-магазине «Books.Ru – Книги России». Если Вы получили
данный файл каким-либо другим образом, Вы нарушили междуна-
родное законодательство и законодательство Российской Федерации
об охране авторского права. Вам необходимо удалить данный файл,
атакже сообщить издательству «Символ-Плюс» (piracy@symbol.ru),
где именно Вы получили данный файл.
Programming
Python
Forth Edition
Mark Lutz
Программирование
Python
на
I
том
Четвертое издание
Марк Лутц
Санкт-Петербург – Москва
2011
Марк Лутц
Программирование на Python, том I,
4-е издание
Перевод А. Киселева
Главный редактор А. Галунов
Зав. редакцией Н. Макарова
Выпускающий редактор П. Щеголев
Редактор Ю. Бочина
Корректор С. Минин
Верстка К. Чубаров
Лутц М.
Программирование на Python, том I, 4-е издание. – Пер. с англ. – СПб.:
Символ-Плюс, 2011. – 992 с., ил.
ISBN 978-5-93286-210-0
Вы овладели основами Python. Что дальше? Эта книга представляет собой по-
дробное руководство по применению этого языка программирования в основ-
ных прикладных областях – системном администрировании, создании графи-
ческих интерфейсов и веб-приложений. Исследуются приемы работы с базами
данных, программирования сетевых взаимодействий, создания интерфейсов
для сценариев, обработки текста и многие другие.
Издание описывает синтаксис языка и методики разработки, содержит боль-
шое количество примеров, иллюстрирующих типичные идиомы программи-
рования и корректное их применение. Кроме того, исследуется эффективность
Python в качестве инструмента разработки программного обеспечения, в отли-
чие от просто инструмента «создания сценариев».
В четвертое издание включено описание новых особенностей языка, биб лиотек
и практических приемов программирования для Python 3.X. Примеры, пред-
ставленные в книге, опробованы под третьей альфа-версией Python 3.2.
Можно смело утверждать, что это обстоятельная и всесторонняя книга предна-
значена быть первой ступенью на пути овладения мастерством разработки при-
ложений на языке Python.
ISBN 978-5-93286-210-0
ISBN 978-0-596-15810-1 (англ)
© Издательство Символ-Плюс, 2011
Authorized translation of the English edition © 2011 O’Reilly Media Inc. This trans-
lation is publ ished and sold by permission of O’Reilly Media Inc., the owner of all rights
to publish and sell the same.
Все права на данное издание защищены Законодательством РФ, включая право на полное или час-
тичное воспроизведение в любой форме. Все товарные знаки или зарегистрированные товарные зна-
ки, упоминаемые в настоящем издании, являются собственностью соответствующих фирм.
Издательство «Символ-Плюс». 199034, Санкт-Петербург, 16 линия, 7,
тел. (812) 380-5007, www.symbol.ru. Лицензия ЛП N 000054 от 25.12.98.
Подписано в печать 31.07.2011. Формат 70×100 1/16.
Печать офсетная. Объем 62 печ. л.
Python-Prog-4ed_titul.indd 4 01.08.2011 18:06:11
Оглавление
Предисловие ...........................................................................15
«А теперь нечто совершенно иное...» .......................................15
Об этой книге .......................................................................16
О четвертом издании .............................................................18
Влияние Python 3.X на эту книгу ............................................26
Использование примеров из книги ..........................................31
Как связаться с издательством O’Reilly ....................................33
Типографские соглашения .....................................................34
Благодарности ........................................................................35
Об авторе ...............................................................................38
Часть I. Начало ..........................................................................39
Глава 1. Предварительный обзор .............................................41
«Программирование на Python»: краткий очерк .......................41
Постановка задачи ................................................................42
Шаг 1: представление записей ................................................43
Списки ............................................................................43
Словари ..........................................................................48
Шаг 2: сохранение записей на длительное время .......................54
Текстовые файлы .............................................................55
Модуль pickle ...................................................................61
Работа модуля pickle с отдельными записями .......................64
Модуль shelve ..................................................................66
Шаг 3: переход к ООП ............................................................69
Использование классов .....................................................71
Добавляем поведение ........................................................73
Добавляем наследование ...................................................74
Реструктуризация программного кода .................................75
Добавляем возможность сохранения ...................................79
Другие разновидности баз данных ......................................81
Шаг 4: добавляем интерфейс командной строки ........................83
Шаг 5: добавляем графический интерфейс ...............................86
6 Оглавление
Основы графических интерфейсов ......................................87
ООП при разработке графических интерфейсов .....................89
Получение ввода от пользователя .......................................92
Графический интерфейс к хранилищу .................................94
Шаг 6: добавляем веб-интерфейс ...........................................102
Основы CGI ....................................................................103
Запуск веб-сервера ..........................................................106
Использование строки запроса и модуля urllib ....................109
Форматирование текста ответа .........................................110
Веб-интерфейс к хранилищу с данными .............................111
Конец демонстрационного примера .......................................123
Часть II. Системное программирование ................................127
Глава 2. Системные инструменты ..........................................129
«os.path - дорога к знанию» .................................................129
Зачем здесь нужен Python? ..............................................129
В следующих пяти главах ................................................130
Знакомство с разработкой системных сценариев .....................132
Системные модули Python ...............................................133
Источники документации по модулям ...............................134
Постраничный вывод строк документации .........................135
Сценарий постраничного вывода.......................................137
Основы использования строковых методов .........................138
Другие особенности строк в Python 3.X:
Юникод и тип bytes ........................................................ 141
Основы операций с файлами ............................................142
Два способа использования программ ...............................143
Руководства по биб лиотекам Python ..................................144
Коммерческие справочники .............................................145
Модуль sys ........................................................................146
Платформы и версии ......................................................146
Путь поиска модулей ......................................................146
Таблица загруженных модулей ........................................148
Сведения об исключениях ...............................................149
Другие элементы, экспортируемые модулем sys .................150
Модуль os ..........................................................................150
Инструменты в модуле os .................................................151
Средства администрирования ...........................................152
Константы переносимости ...............................................153
Основные инструменты os.path ........................................153
Выполнение команд оболочки из сценариев .......................156
Другие элементы, экспортируемые модулем os ..................163
Оглавление 7
Глава 3. Контекст выполнения сценариев ...............................167
«Ваши аргументы, пожалуйста!» ..........................................167
Текущий рабочий каталог ...................................................168
Текущий рабочий каталог, файлы и путь поиска модулей ....168
Текущий рабочий каталог и командные строки ..................170
Аргументы командной строки ..............................................171
Анализ аргументов командной строки ...............................172
Переменные окружения оболочки .........................................175
Получение значений переменных оболочки ........................176
Изменение переменных оболочки .....................................177
Особенности переменных оболочки:
родители, putenv и getenv ................................................179
Стандартные потоки ввода-вывода ........................................180
Перенаправление потоков ввода-вывода
в файлы и программы .....................................................181
Перенаправление потоков
и взаимодействие с пользователем ....................................187
Перенаправление потоков в объекты Python .......................192
Вспомогательные классы io.StringIO и io.BytesIO ...............196
Перехват потока stderr ....................................................197
Возможность перенаправления с помощью функции print ....197
Другие варианты перенаправления:
еще раз об os.popen и subprocess ........................................198
Глава 4. Инструменты для работы с файлами и каталогами ....206
«Как очистить свой жесткий диск за пять простых шагов» .......206
Инструменты для работы с файлами .....................................206
Модель объекта файла в Python 3.X ..................................207
Использование встроенных объектов файлов ......................209
Двоичные и текстовые файлы ...........................................220
Низкоуровневые инструменты в модуле os
для работы с файлами .....................................................233
Сканеры файлов .............................................................239
Инструменты для работы с каталогами ..................................243
Обход одного каталога .....................................................243
Обход деревьев каталогов ................................................249
Обработка имен файлов в Юникоде
в версии 3.X: listdir, walk, glob .........................................254
Глава 5. Системные инструменты
параллельного выполнения ..................................................258
«Расскажите обезьянам, что им делать» ................................258
Ветвление процессов ...........................................................260
Комбинация fork/exec .....................................................264
Потоки выполнения ............................................................270
8 Оглавление
Модуль _thread ..............................................................274
Модуль threading............................................................287
Модуль queue .................................................................293
Графические интерфейсы и потоки выполнения:
предварительное знакомство ............................................298
Подробнее о глобальной блокировке
интерпретатора (GIL) ......................................................302
Завершение программ .........................................................306
Завершение программ средствами модуля sys .....................306
Завершение программ средствами модуля os ......................307
Коды завершения команд оболочки ...................................308
Код завершения процесса
и совместно используемая информация .............................312
Код завершения потока
и совместно используемая информация .............................314
Взаимодействия между процессами .......................................316
Анонимные каналы ........................................................318
Именованные каналы (fifo) ..............................................331
Сокеты: первый взгляд ....................................................335
Сигналы ........................................................................340
Пакет multiprocessing .........................................................343
Зачем нужен пакет multiprocessing?..................................344
Основы: процессы и блокировки .......................................346
Инструменты IPC: каналы, разделяемая память и очереди ...349
Запуск независимых программ .........................................357
И многое другое ..............................................................359
Зачем нужен пакет multiprocessing? Заключение ................361
Другие способы запуска программ .........................................362
Семейство функций os.spawn ...........................................362
Функция os.startfile в Windows ........................................366
Переносимый модуль запуска программ ................................368
Другие системные инструменты ............................................374
Глава 6. Законченные системные программы ........................376
«Ярость поиска» .................................................................376
Игра: «Найди самый большой файл Python» ...........................377
Сканирование каталога стандартной биб лиотеки ................377
Сканирование дерева каталогов стандартной библиотеки .....378
Сканирование пути поиска модулей ..................................379
Сканирование всего компьютера .......................................382
Вывод имен файлов с символами Юникода .........................387
Разрезание и объединение файлов .........................................390
Разрезание файлов переносимым способом .........................391
Соединение файлов переносимым образом .........................395
Оглавление 9
Варианты использования .................................................399
Создание веб-страниц для переадресации ...............................403
Файл шаблона страницы .................................................404
Сценарий генератора страниц ...........................................405
Сценарий регрессивного тестирования ...................................408
Запускаем тестирование ..................................................411
Копирование деревьев каталогов ...........................................417
Сравнение деревьев каталогов ..............................................422
Поиск расхождений между каталогами .............................422
Поиск различий между деревьями ....................................425
Запускаем сценарий........................................................428
Проверка резервных копий ..............................................431
Отчет о различиях и другие идеи ......................................433
Поиск в деревьях каталогов ..................................................435
grep, glob и find ..............................................................436
Создание собственного модуля find ...................................437
Удаление файлов с байт-кодом .........................................442
Visitor: обход каталогов «++» ...............................................448
Редактирование файлов в деревьях каталогов (Visitor).........454
Глобальная замена в деревьях каталогов (Visitor) ...............456
Подсчет строк исходного программного кода (Visitor) ..........458
Копирование деревьев каталогов
с помощью классов (Visitor) .............................................460
Другие примеры обходчиков (внешние) .............................462
Проигрывание медиафайлов .................................................464
Модуль webbrowser .........................................................468
Модуль mimetypes ..........................................................470
Запускаем сценарий........................................................473
Автоматизированный запуск программ (внешние примеры) .....473
Часть III. Программирование графических интерфейсов ....477
Глава 7. Графические интерфейсы пользователя ....................479
«Я здесь, я смотрю на тебя, детка» ........................................479
Темы программирования GUI ...........................................479
Запуск примеров ............................................................481
Различные возможности создания GUI в Python ......................483
Обзор tkinter ......................................................................490
Практические преимущества tkinter ................................490
Документация tkinter .....................................................492
Расширения для tkinter ...................................................492
Структура tkinter ...........................................................495
Взбираясь по кривой обучения
программированию графических интерфейсов ........................497