992
Python Эффективное объектно-ориентированное программирование Программирование на 4-е издание охватывает Python 3.Х Марк Лутц том I

Программирование на Python, том Iiro23.ru/.../files/mark_lutc._programmirovanie_na_python.pdfОсновы использования строковых методов

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

  • Python

    Эффективное объектно-ориентированное программирование

    Программирование на

    4-е издание

    охватывает Python 3.Х

    Марк Лутц

    Пр

    огр

    амм

    ир

    ован

    ие

    на P

    ytho

    утц

    четвертое издание

    том I

    том I

    Вы овладели основами Python. Что дальше? Эта книга представляет собой подробное руководство по применению языка программирования в основных прикладных областях – системном администрировании, создании графических интерфейсов и веб-приложений. Исследуются приемы работы с базами данных, приемы програм-мирования сетевых взаимодействий, создания интерфейсов для сценариев, обра-ботки текста и многие другие.

    В книге кратко и ясно описываются синтаксис языка и методики разработки, вклю-чено большое количество примеров, иллюстрирующих типичные идиомы програм-мирования и корректное их применение. Кроме того, исследуется эффективность Python в качестве инструмента разработки программного обеспечения, в отличие от просто инструмента «создания сценариев». В четвертое издание включено описание новых особенностей языка, биб лиотек и практических приемов программирования для Python 3.X. Примеры, представленные в книге, опробованы под третьей альфа-версией Python 3.2.

    В первом томе рассматриваются следующие темы:

    • КраткийобзорязыкаPython.Простой демонстрационный пример, иллюст-ри рующий приемы ООП, способы представления данных, сохранения объектов, создания графических интерфейсов и основы веб-разработки.

    • Системноепрограммирование.Исследуются инструменты доступа к систем-ным интерфейсам и приемы создания сценариев командной строки, обработки файлов и папок, параллельного выполнения программ и многие другие.

    • Программированиеграфическихинтерфейсов.Демонстрируется исполь-зо вание библиотеки виджетов tkinter, входящей в состав стандартной библиотеки Python, для создания законченных пользовательских интерфейсов.

    «В этой книге вы найдете все – от приемов отладки до рекомендаций по проекти-рованию, что поможет вам решать масштабные задачи и обходить типичные препятствия.»

    Диана Донован (Diane Donovan), California Bookwatch

    МаркЛутц (Mark Lutz) является ведущим специалистом в области обучения языку Python. Вот уже 25 лет Марк занимается разработкой программного обеспечения и является автором предыдущих изданий книги «Программирование на Python», а также книг «Изучаем Python» и «Python Pocket Reference», выпущенных издатель-ством O’Reilly.

    Программирование на Python, том I

    Категория: программированиеУровень подготовки читателей: средний

    Издательство «Символ-Плюс»(812) 380-5007, (495) 638-5305

    www.symbol.ru

    ISBN 978-5-93286-210-0

    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 – Книги России». Если Вы получили данный файл каким-либо другим образом, Вы нарушили междуна-родное законодательство и законодательство Российской Федерации об охране авторского права. Вам необходимо удалить данный файл, атакже сообщить издательству «Символ-Плюс» ([email protected]), где именно Вы получили данный файл.

  • 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 (англ)

    © Издательство Символ-Плюс, 2011Authorized translation of the English edition © 2011 O’Reilly Media Inc. This trans-lation is pub lished 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

    Поиск в деревьях каталогов .................................................. 435grep, 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

  • 10 Оглавление

    «Hello World» в четыре строки (или меньше) ...................... 497Основы использования tkinter .......................................... 498Создание виджетов ......................................................... 499Менеджеры компоновки .................................................. 500Запуск программ с графическим интерфейсом .................... 501Альтернативные приемы использования tkinter ................. 502Основы изменения размеров виджетов ............................... 504Настройка параметров графического элемента и заголовка окна ............................................................ 506Еще одна версия в память о былых временах ...................... 508Добавление виджетов без их сохранения ............................ 508

    Добавление кнопок и обработчиков ....................................... 511Еще раз об изменении размеров виджетов: растягивание ...... 512

    Добавление пользовательских обработчиков ........................... 514lambda-выражения как обработчики событий ..................... 515Отложенные вызовы с применением инструкций lambda и ссылок на объекты ........................... 516Проблемы с областями видимости обработчиков ................. 518Связанные методы как обработчики событий...................... 525Объекты вызываемых классов как обработчики событий ..... 527Другие протоколы обратного вызова в tkinter ..................... 528Связывание событий ....................................................... 529

    Добавление нескольких виджетов ......................................... 530Еще раз об изменении размеров: обрезание ......................... 531Прикрепление виджетов к фреймам .................................. 532Порядок компоновки и прикрепление к сторонам ............... 533Снова о параметрах expand и fill компоновки ..................... 534Использование якорей вместо растягивания ....................... 536

    Настройка виджетов с помощью классов ................................ 537Стандартизация поведения и внешнего вида ....................... 538

    Повторно используемые компоненты и классы ........................ 540Прикрепление классов компонентов ................................. 542Расширение классов компонентов ..................................... 544Автономные классы-контейнеры ...................................... 546

    Завершение начального обучения ......................................... 549Соответствие между Python/tkinter и Tcl/Tk .......................... 551

    Глава 8. Экскурсия по tkinter, часть 1 ...................................... 553«Виджеты, гаджеты, графические интерфейсы… Бог мой!» .................................... 553Темы этой главы ................................................................. 554Настройка внешнего вида виджетов ...................................... 554Окна верхнего уровня .......................................................... 558

    Виджеты Toplevel и Tk .................................................... 560

  • Оглавление 11

    Протоколы окна верхнего уровня ...................................... 561Диалоги ............................................................................ 566

    Стандартные (типичные) диалоги ..................................... 567Модуль диалогов в старом стиле ....................................... 580Пользовательские диалоги ............................................... 581

    Привязка событий .............................................................. 585Другие события, доступные с помощью метода bind ............. 590

    Виджеты Message и Entry .................................................... 592Message ......................................................................... 592Entry ............................................................................ 593Компоновка элементов ввода в формах .............................. 595«Переменные» tkinter и альтернативные способы компоновки форм ........................................................... 599

    Флажки, переключатели и ползунки ..................................... 602Флажки ........................................................................ 602Переключатели .............................................................. 607Ползунки ...................................................................... 614

    Три способа использования графических интерфейсов ............. 618Прикрепление к фреймам ................................................ 619Независимые окна .......................................................... 624Запуск программ ............................................................ 626Изображения ................................................................. 633Развлечения с кнопками и картинками ............................. 637

    Отображение и обработка изображений с помощью PIL ............ 641Основы PIL .................................................................... 641Отображение других типов графических изображений с помощью PIL ............................................ 643Отображение всех изображений в каталоге ......................... 645Создание миниатюр изображений с помощью пакета PIL ..................................................... 647

    Глава 9. Экскурсия по tkinter, часть 2 ...................................... 659«Меню дня: Spam, Spam и еще раз Spam» ............................... 659Меню ................................................................................ 660

    Меню окон верхнего уровня ............................................. 660Меню на основе виджетов Frame и Menubutton ................... 665Окна с меню и панелью инструментов ................................ 670

    Виджеты Listbox и Scrollbar ................................................. 676Программирование виджетов списков ............................... 678Программирование полос прокрутки ................................. 680Компоновка полос прокрутки ........................................... 681

    Виджет Text ....................................................................... 683Программирование виджета Text ...................................... 685Операции редактирования текста ..................................... 689

  • 12 Оглавление

    Юникод и виджет Text .................................................... 695Более сложные операции с текстом и тегами ...................... 707

    Виджет Canvas ................................................................... 709Базовые операции с виджетом Canvas ................................ 710Программирование виджета Canvas .................................. 711Прокрутка холстов ......................................................... 715Холсты с поддержкой прокрутки и миниатюр изображений ................................................ 718События холстов ............................................................ 722

    Сетки ................................................................................ 726В чем преимущества размещения по сетке? ....................... 727Основы работы с сеткой: еще раз о формах ввода ................. 728Сравнение методов grid и pack .......................................... 729Сочетание grid и pack ...................................................... 731Реализация возможности растягивания виджетов, размещаемых по сетке..................................................... 734Создание крупных таблиц с помощью grid ......................... 738

    Инструменты синхронизации, потоки выполнения и анимация............................................ 747

    Использование потоков выполнения в графических интерфейсах tkinter ................................... 750Использование метода after ............................................. 752Простые приемы воспроизведения анимации ..................... 755Другие темы, связанные с анимацией ................................ 762

    Конец экскурсии ................................................................ 764Другие виджеты и их параметры ...................................... 764

    Глава 10. Приемы программирования графических интерфейсов .................................................... 766

    «Создание улучшенной мышеловки» ..................................... 766GuiMixin: универсальные подмешиваемые классы ....................................................... 767

    Функции создания виджетов ............................................ 768Вспомогательные подмешиваемые классы ......................... 769

    GuiMaker: автоматизация создания меню и панелей инструментов....................................................... 773

    Протоколы подклассов .................................................... 778Классы GuiMaker ........................................................... 779Программный код самотестирования GuiMaker .................. 779BigGui: клиентская демонстрационная программа .............. 781

    ShellGui: графические интерфейсы к инструментам командной строки ........................................ 785

    Обобщенный графический интерфейс инструментов оболочки ................................................... 785Классы наборов утилит.................................................... 788

  • Оглавление 13

    Добавление графических интерфейсов к инструментам командной строки ................................... 789

    GuiStreams: перенаправление потоков данных в виджеты ................................................... 797

    Использование перенаправления сценариев архивирования ............................................... 802

    Динамическая перезагрузка обработчиков ............................. 803Обертывание интерфейсов окон верхнего уровня ..................... 805Графические интерфейсы, потоки выполнения и очереди ......... 810

    Помещение данных в очередь ........................................... 813Помещение обработчиков в очередь ................................... 817

    Другие способы добавления GUI к сценариям командной строки ............................................. 825

    Вывод окон графического интерфейса по требованию .......... 826Реализация графического интерфейса в виде отдельной программы: сокеты (вторая встреча) ................................. 830Реализация графического интерфейса в виде отдельной программы: каналы ......................................... 835

    Запускающие программы PyDemos и PyGadgets ...................... 845Панель запуска PyDemos ................................................. 846Панель запуска PyGadgets ............................................... 852

    Глава 11. Примеры законченных программ с графическим интерфейсом ................................................. 857

    «Python, открытое программное обеспечение и Camaro» ........... 857Примеры в других главах ................................................ 858Стратегия данной главы .................................................. 859

    PyEdit: программа/объект текстового редактора ..................... 862Запуск PyEdit ................................................................ 863Изменения в версии PyEdit 2.0 (третье издание).................. 872Изменения в версии PyEdit 2.1 (четвертое издание) ............ 874Исходный программный код PyEdit .................................. 888

    PyPhoto: программа просмотра и изменения размеров изображений ........................................................ 917

    Запуск PyPhoto .............................................................. 918Исходный программный код PyPhoto ................................ 922

    PyView: слайд-шоу для изображений и примечаний ................ 929Запуск PyView ............................................................... 929Исходный программный код PyView ................................. 935

    PyDraw: рисование и перемещение графики ........................... 941Запуск PyDraw ............................................................... 941Исходный программный код PyDraw................................. 943

    PyClock: виджет аналоговых/цифровых часов ........................ 951Краткий урок геометрии.................................................. 951

  • 14 Оглавление

    Запуск PyClock ............................................................... 957Исходный программный код PyClock ................................ 961

    PyToe: виджет игры в крестики-нолики ................................. 969Запуск PyToe ................................................................. 969Исходный программный код PyToe (внешний) ................... 971

    Что дальше ........................................................................ 974

    Алфавитный указатель ......................................................... 976

  • Предисловие

    «А теперь нечто совершенно иное...»В этой книге исследуются способы применения языка программиро-вания Python в типичных прикладных областях и в реально возни-кающих задачах. Эта книга рассказывает, что можно делать с языком Python после того, как вы овладели его основами.

    Эта книга предполагает, что читатель еще только начинает знакомить-ся с рассматриваемыми в книге прикладными областями – графиче-скими интерфейсами, Интернетом, базами данных, сис темным про-граммированием и так далее, – и представляет каждую из них, начи-ная с самых азов, выполняя роль учебника. Попутно книга ставит своей целью познакомить читателя с часто используемыми инструментами и биб лиотеками, но не с основами языка. Таким образом, данная книга является ресурсом, позволяющим читателю получить более глубокое понимание роли языка Python в практике программирования.

    Дополнительно в этой книге исследуется пригодность языка Python на роль инструмента  разработки  программного  обеспечения, в отличие от просто инструмента «создания сценариев». Многие примеры, пред-ставленные в этой книге, подобраны в соответствии с этой целью – сре-ди них вы найдете примеры постепенной разработки клиентов элек-тронной почты, опирающиеся на тысячи строк программного кода. Создание подобных крупномасштабных приложений всегда будет не-простым делом, но мы покажем, насколько быстрее и проще создаются такие приложения, когда они разрабатываются на языке Python.

    Это четвертое издание было дополнено представлением новых особен-ностей языка, биб лиотек и практических приемов программирования для Python 3.X. В частности, примеры, представленные в книге, выпол-няются под управлением интерпретатора версии Python 3.1 – наиболее свежей версии Python на момент написания этих строк. Непосредствен-но перед публикацией книги все основные примеры были опробованы под третьей альфа-версией Python 3.2, но вообще говоря, они должны сохранить свою работоспособность при использовании любой версии Python из линейки 3.X. Кроме того, это издание было реорганизовано с целью упорядочить прежний материал и добавить описание новых инструментов и тем.

  • 16 Предисловие

    Поскольку среди читателей этой книги будут и те, кому в руки пер-вым попало это издание, и те, кто знаком с предыдущими изданиями, я хочу в этом предисловии более подробно остановиться на целях и за-дачах этой книги, прежде чем перейти к программному коду.

    Об этой книгеДанная книга является учебником по применению языка Python для решения наиболее типичных задач в различных прикладных обла-стях. В ней рассказывается о применении языка Python в сис темном администрировании, для создания графических интерфейсов и веб-приложений и исследуются приемы программирования сетевых взаи-модействий, взаимодействий с базами данных, обработки текста, созда-ния интерфейсов для сценариев и во многих других областях. Несмотря на то, что на протяжении всей книги используется язык Python, тем не менее основное внимание будет уделяться не основам языка, а приемам решения практических задач.

    Экосистема этой книгиДиапазон тем, обсуждаемых в этой книге, позволяет ее рассматривать, как второй том двухтомника, который должен быть дополнен третьим томом. Важно помнить, что эта книга описывает особенности разработ-ки приложений и является продолжением книги «Изучаем Python»1, рассматривающей основы языка, знание которых совершенно необхо-димо для чтения этой книги. Поясним, как связаны эти книги между собой:

    • «Изучаем Python» – подробно описывает основы программирования на языке Python. Основное внимание уделяется базовым особенно-стям языка Python, знание которых является необходимой предпо-сылкой для чтения этой книги.

    • «Программирование на Python» – эта книга охватывает практиче-ские приемы программирования на языке Python. Основное внима-ние в этой книге уделяется биб лиотекам и инструментам, и предпо-лагается, что читатель уже знаком с основами языка.

    • «Python Pocket Reference» – краткий справочник, в котором охва-тываются некоторые подробности, отсутствующие в данной книге. Этот справочник не может использоваться в качестве учебника, но он позволит вам быстро отыскивать описание тех или иных особен-ностей.

    В некотором смысле, эта книга является аналогом «Изучаем Python», но в ней раскрываются не основы языка, а основы прикладного про-граммирования. Это последовательный учебник, в котором не делается

    1 Марк Лутц «Изучаем Python», 4 издание, СПб.: Символ-Плюс, 2010.

  • Предисловие 17

    никаких предположений об уровне вашей подготовки, и каждая тема начинает рассматриваться с самых азов. Например, при изучении темы разработки веб-приложений вы приобретете все необходимые знания, которые позволят вам создавать простые веб-сайты, и получите пред-ставление о более развитых фреймворках и инструментах, которые пригодятся вам с ростом ваших потребностей. Обсуждение особенно-стей конструирования графических интерфейсов также идет по нарас-тающей – от простого к сложному.

    Дополнением к этой книге может служить книга «Python Pocket Refe-rence» (карманный справочник по языку Python), где предоставляется дополнительная информация о некоторых особенностях, не рассматри-ваемых в данной книге, и которая может служить отличным справоч-ником. Книга «Python Pocket Reference» является всего лишь справоч-ником, и в ней практически отсутствуют примеры и пояснения, но она может служить отличным дополнением к книгам «Изучаем Python» и «Программирование на Python». Поскольку текущее четвертое изда-ние «Python Pocket Reference» содержит информацию об обеих основ-ных версиях Python, 2.X и 3.X, оно также может использоваться чита-телями, выполняющими переход между этими двумя версиями Python (подробнее об этом чуть ниже)1.

    Чего нет в этой книгеИз-за распределения областей рассмотрения по книгам, о которых упо-миналось выше, область применения этой книги имеет следующие ограничения:

    • Она не раскрывает основы языка Python

    • Она не предназначалась для использования в качестве справочника по особенностям языка

    Первый из этих двух пунктов отражает тот факт, что освещение основ языка является исключительной прерогативой книги «Изучаем Python», и если вы совершенно не знакомы с языком Python, я рекомен-дую сначала прочитать книгу «Изучаем Python», прежде чем прини-маться за эту книгу, так как здесь предполагается знание основ языка.

    1 Я являюсь автором всех трех книг, упомянутых в этом разделе, и это дает мне возможность контролировать их содержимое и избегать повторений. Это также означает, что как автор я стараюсь не комментировать многие другие книги о Python, которые могут оказаться для вас весьма полезными и в которых могут обсуждаться темы, не рассматривающиеся ни в одной из моих книг. Упоминания об этих книгах вы найдете в Интернете или в дру-гих источниках информации о Python. Все три мои книги отражают опыт 13 лет преподавания Python и путь, пройденный от момента выхода перво-го издания книги «Programming Python» в 1995 году. (Здесь вполне умест-но поместить фотографию убеленного сединами путешественника-иссле-дователя.)

  • 18 Предисловие

    Конечно, некоторые приемы языка демонстрируются в примерах этой книги, а в крупных примерах иллюстрируется, как можно объединять базовые концепции в действующие программы. Особенности объектно-ориентированного программирования, например, часто лучше всего демонстрировать на примерах крупных программ, которые и будут представлены здесь. Однако формально эта книга предполагает, что вы уже знакомы с основами языка Python в достаточной степени, чтобы понять примеры программного кода. Основное внимание здесь будет уделяться биб лиотекам и инструментам. Поэтому если программный код, который будет демонстрироваться, покажется вам непонятным, – справляйтесь в других источниках.

    Второй из этих двух пунктов отражает тот факт, что за многие годы об этой книге сложились неверные представления (вероятно, стоило на-звать эту книгу «Применение Python», будь мы чуть более прозорливы в далеком 1995 году). Я хочу ясно обозначить: эта книга – не справоч-ник. Это учебник. Здесь вы можете найти некоторые подробности, вос-пользовавшись оглавлением или алфавитным указателем, но данная книга не предназначалась для использования именно в таких целях. Краткий справочник вы найдете в книге под названием «Python Pocket Reference», который вы найдете весьма полезным, как только начнете самостоятельно писать нетривиальный программный код. Существуют и другие источники справочной информации, в том числе другие кни-ги и собственный набор справочных руководств по языку Python. Цель этой книги – постепенное обучение применению языка Python для ре-шения типичных задач, а не подробное описание мельчайших особен-ностей.

    О четвертом изданииЕсли это первое издание книги, которое вы видите, последние измене-ния, вероятно, вас будут интересовать меньше всего, поэтому вы можете просто перейти к следующему разделу. Для тех, кто читал предыдущие издания, можно отметить, что четвертое издание этой книги содержит три важных изменения:

    • Оно охватывает только Python 3.X.

    • Оно было сокращено, чтобы сделать книгу еще направленнее и осво-бодить место для новых тем.

    • В него было добавлено обсуждение новых тем и инструментов, по-явившихся в мире Python.

    Первый из этих пунктов является, пожалуй, наиболее важным – это издание опирается на Python 3.X, на стандартную биб лиотеку для этой версии и на распространенные приемы программирования, используе-мые его пользователями. Однако чтобы объяснить, как это и два других изменения отразились на данном издании, я должен поведать о некото-рых деталях.

  • Предисловие 19

    Изменения в этом изданииПредыдущие версии книги получили весьма широкое распростране-ние, поэтому ниже я приведу некоторые из наиболее заметных измене-ний в этом издании:

    Существовавший ранее материал был сжат, чтобы освободить место для новых тем

    Предыдущее издание книги также имело объем около 1600 страниц, что не позволило выделить достаточно места для рассмотрения но-вых тем (одна только ориентированность Python 3.X на использова-ние Юникода предполагает массу нового материала). К счастью, не-давние изменения в мире Python позволили нам без особого ущерба выкинуть часть существующего материала и освободить место для новых тем.

    Глубина обсуждения оставшихся тем при этом не пострадала – эта книга остается такой же основательной, как и прежде. Тем не менее одной из основных задач, стоявших при подготовке этого издания, было не допустить дальнейшего роста его объема, а множество дру-гих изменений и сокращений, о которых я упомяну ниже, были сде-ланы отчасти для того, чтобы включить новые темы.

    Рассматривается только Python 3.X 

    Примеры и пояснения были изменены с учетом того, что теперь эта книга охватывает только версию Python 3.X. Версия Python 2.X больше не поддерживается, за исключением тех особенностей, кото-рые перекочевали из версии 2.X в версию 3.X без изменений. Несмо-тря на то, что таких особенностей достаточно много, благодаря чему читатели могут использовать версию 2.X, тем не менее формально книга поддерживает только версию 3.X.

    В свою очередь это обстоятельство явилось основным фактором, обе-спечившим сохранение объема этого издания на прежнем уровне. Ограничившись поддержкой только версии Python 3.X – несовме-стимой с версией Python 2.X, которую следует рассматривать как будущее языка Python, – нам удалось избежать дублирования опи-сания особенностей, отличающихся в этих двух версиях Python. Та-кое ограничение поддерживаемых версий особенно важно для такой книги, как эта, где приводится множество расширенных примеров, так как это позволяет демонстрировать примеры только для одной версии.

    Для тех, кто по-прежнему пытается удержаться в обоих мирах, 2.X и 3.X, я подробнее расскажу об изменениях в Python 3.X ниже, в этом же предисловии. Самым важным, пожалуй, изменением в версии 3.X, из тех, что описываются в книге, является усовершен-ствованная поддержка интернационализации в примерах программ PyEdit и PyMailGUI. Несмотря на то, что в версии 2.X также имеет-ся поддержка Юникода, тем не менее усовершенствованная ее реа-

  • 20 Предисловие

    лизация в версии 3.X вынуждает заново пересмотреть реализацию подобных сис тем, прежде ориентированных на работу с кодировкой ASCII.

    Включение недавно появившихся биб лиотек и инструментов

    С момента выхода предыдущего издания появилось или получило дальнейшее развитие множество новых биб лиотек и инструментов, и они также упоминаются здесь. В их число входят новые инстру-менты стандартной биб лиотеки языка Python, такие как модули subprocess (рассматривается в главах 2 и 3) и multiprocessing (рассма-тривается в главе 5), а также новые веб-фреймворки, созданные сто-ронними разработчиками, и инструменты ORM (Object-Relational Mapping – объектно-реляционное отображение) для работы с базами данных. Большинство из них рассматриваются не очень подробно (многие популярные расширения сами по себе являются сложными сис темами и гораздо подробнее описаны в соответствующей литера-туре), но для них дается по крайней мере краткое описание в виде резюме.

    Например, новая биб лиотека виджетов Tk tkinter.ttk рассматрива-ется в главе 7, но весьма кратко. Как правило, в этом издании мы предпочитали упоминать подобные расширения по ходу дела, вме-сто того чтобы представлять примеры программного кода без внят-ного пояснения.

    Это предисловие было ужато

    Я удалил все инструкции по запуску и использованию примеров программ. Поэтому теперь за инструкциями по использованию об-ращайтесь к файлам README, входящим в состав дистрибутива с ком-плектом примеров. Кроме того, я убрал большую часть благодарно-стей, потому что они повторяют благодарности из книги «Изучаем Python», – так как знакомство с книгой «Изучаем Python» теперь считается необходимой предпосылкой, дублирование одного и того же материала здесь ничем не оправдано. Кроме того, было убрано описание содержимого книги – чтобы ознакомиться со структурой книги, обращайтесь к оглавлению.

    Была убрана вводная глава с обзором языка Python 

    Я удалил «организаторскую» главу, присутствовавшую в преды-дущем издании, где описывались сильные стороны языка Python, представлялись наиболее видные пользователи, рассматривались различные философии и так далее. Обращение в свою веру играет важную роль в любой сфере, где вопрос «почему» задается менее ча-сто, чем должен бы. В действительности, если бы мастера Python не занимались его популяризацией, все мы, вероятно, использовали бы сейчас Perl или языки командных оболочек!

    Однако присутствие здесь такой главы стало совершенно излишним из-за наличия сходной главы в книге «Изучаем Python». Поскольку

  • Предисловие 21

    книга «Изучаем Python» должна предшествовать этой книге, я ре-шил не расходовать книжное пространство на повторную агитацию «Питонистов» («Pythonista»). В этой книге предполагается, что вы уже знаете, почему стоит использовать Python, поэтому мы сразу же перейдем к его применению.

    Было убрано заключительное послесловие

    Заключительное послесловие к этой книге было написано еще для первого издания, и теперь ему исполнилось уже 15 лет. Естествен-но, что оно отражает взгляды на Python, в большей степени харак-терные для того времени. Например, использование языка Python для разработки гибридных приложений казалось более значимым в 1995 году, чем в 2010. В современном, более обширном мире Python большинству пользователей не приходится иметь дело со связанным программным кодом на языке C.

    В предыдущих изданиях я добавлял новое послесловие для каждого издания, чтобы уточнить и дополнить идеи, представленные в за-ключении к книге. Теперь я убрал эти послесловия, заменив их ко-ротким примечанием. Само заключение я решил оставить, потому что оно по-прежнему актуально для многих читателей и имеет неко-торую историческую ценность. Да к тому же удачные шутки…

    Было убрано вступительное слово

    По похожим причинам, представленным в двух предыдущих пун-ктах, я убрал разделы со вступительным словом к предыдущим из-даниям. Те, кому это будет интересно, историческую справку о вкла-де Гвидо ван Россума (Guido van Rossum), создателя Python, в раз-витие языка смогут найти в Интернете. Если вам интересно, как за эти годы изменился язык Python с технической точки зрения, смотрите документ «What’s New» («Что нового»), входящий в состав стандартного комплекта руководств по языку Python (доступен по адресу http://www.python.org/doc и устанавливается вместе с Python в Windows и на других платформах).

    Раздел, посвященный интеграции с языком C, был сокращен до одной главы

    Я сократил раздел, посвященный созданию расширений на языке C и встраиванию сценариев на языке Python в программы на языке C, до одной короткой главы в конце части, посвященной инструмен-тальным средствам, где коротко описываются основные понятия, связанные с этой темой. Проблемы связывания программ на языке Python с биб лиотеками на языке C на сегодняшний день волнуют лишь незначительную часть пользователей, а те, кому эти навыки действительно необходимы, найдут более полный пример интегра-ции в исходных текстах самого языка Python. Имеющиеся возмож-ности перечислены здесь достаточно полно, но значительный объем программного кода на языке C был вырезан в расчете на то, что более

  • 22 Предисловие

    представительные примеры вы найдете в программном коде реали-зации самого языка Python.

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

    Прежние две главы с большими примерами использования Python в сис темном программировании были объединены в одну, более короткую главу с новыми или значительно переработанными при-мерами. Фактически эта часть (часть II) подверглась самым значи-тельным изменениям. Она включает описание новых инструментов, таких как модули subprocess и multiprocessing, знакомит читателей с сокетами, а кроме того, из нее были удалены устаревшие сведе-ния и примеры, унаследованные из прежних изданий. Честно при-знаться, несколько примеров работы с файлами были созданы еще в 1990-х годах и оказались сильно устаревшими. Начальная глава в этой части была разбита на две, чтобы упростить чтение материала (описание контекста командной оболочки, включая потоки ввода-вывода, было вынесено в отдельную главу), а несколько листингов крупных программ (включая запускающие сценарии с автоматиче-ской настройкой) теперь вынесены за пределы книги и включены в состав дистрибутива с комплектом примеров.

    Некоторые крупные примеры были исключены из книги (но остались в составе дистрибутива с комплектом примеров)

    Точно так же из книги были исключены два крупных примера, демонстрирующих создание графического интерфейса, PyTree и PyForm. Однако их обновленная реализация доступна в комплек-те примеров. В этом издании вы все еще сможете найти упомина-ние и описание множества крупных примеров, включая примеры реализации полноценных клиентов электронной почты с графиче-ским и веб-интерфейсом, а также программы для просмотра изо-бражений, калькуляторы, часы, текстовые редакторы с поддержкой Юникода, простые графические редакторы, сценарии регрессивного тестирования и многие другие. Однако, так как программный код примеров не добавляет ничего важного к раскрытию темы и вообще эти примеры предлагались в основном для самостоятельного изуче-ния, – я перевел их в разряд дополнительной информации и исклю-чил их из текста этого издания книги.

    Обширная глава с описанием тем, касающихся Интернета, была за-менена кратким обзором 

    Я полностью убрал обширную главу с описанием тем, касающихся Интернета, оставив лишь краткий обзор в начале части (с акцентом на возможностях создания графического интерфейса, который при-водится в начале третьей части «Программирование GUI»). Здесь вы найдете все ранее включавшиеся в рассмотрение инструменты, такие как веб-фреймворк ZOPE, объектная модель COM, техноло-гии Windows Active Scripting и ASP, HTMLgen, Python Server Pages

  • Предисловие 23

    (PSP), Jython и уже серьезно устаревшая сис тема Grail. Некоторые из этих инструментов по-прежнему заслуживают положительных оценок, но в этом издании никакие из них не рассматриваются под-робно. В обзор были добавлены новые инструменты (включая многие из тех, что перечислены в следующем абзаце), но, опять же, весьма краткие и без примеров программного кода.

    Несмотря на все попытки автора угадать направления развития веб-технологий в будущем, печатное издание не способно полностью со-ответствовать эволюции сферы развития Интернета. Например, в на-стоящее время появились веб-фреймворки, такие как Django, Google App Engine, TurboGears, pylons и web2py, соперничающие по своей популярности с ZOPE. Точно так же фреймворк .NET Framework во многих приложениях вытеснил объектную модель Windows COM. Реализация IronPython теперь способна обеспечить такую же тес-ную интеграцию с .NET, как и Jython с Java. А механизм Active Scripting в значительной степени может быть замещен клиентски-ми фреймворками, основанными на JavaScript и использующими технологию AJAX, такими как Flex, Silverlight и pyjamas (которые часто называют средствами разработки полнофункциональных веб-приложений). Кроме собственно исторической ценности, примеры, ранее представленные в этой категории, не давали возможности изучить описываемые инструменты или хотя бы судить об их досто-инствах.

    Вместо того чтобы включать в книгу неполное (и практически бес-полезное) описание инструментов, которые в течение предпола-гаемого срока жизни этого издания могут как уйти далеко вперед в своем развитии, так и исчезнуть со сцены, я решил предоставить лишь краткие обзоры наиболее важных тем, касающихся Интерне-та, и предлагаю читателям самим постараться найти необходимые подробности в Интернете. По сути, основная цель книги, которую вы читаете, состоит в том, чтобы дать углубленные знания об основах Интернета, которые позволят вам воспользоваться более сложными сис темами, когда вы будете готовы сделать шаг вперед.

    Единственное исключение: описание XML, присутствовавшее ранее в этой главе, было дополнено и перемещено в главу, посвященную об-работке текста (где оно и должно было бы находиться). Точно так же было сохранено описание объектно-ориентированной базы данных ZODB, поддерживаемой фреймворком ZOPE, хотя и в сильно уре-занном виде, чтобы получить возможность добавить описание меха-низмов ORM, таких как SQLObject и SQLAlchemy (также в краткой форме).

    Задействованы современные инструменты, доступные в версии 3.X

    К моменту написания этих строк Python 3.X все еще находился на этапе внедрения, и некоторые из инструментов сторонних разра-ботчиков, которые использовались в примерах в предыдущих из-

  • 24 Предисловие

    даниях этой книги, по-прежнему доступны только в версиях для Python 2.X. Чтобы обойти этот временный недостаток, я изменил не-которые примеры, задействовав в них альтернативные инструмен-ты, обеспечивающие поддержку версии Python 3.X.

    Наиболее заметным в этом смысле является раздел, посвященный базам данных SQL, – теперь в нем вместо интерфейса доступа к серве-ру MySQL, присутствующего в Python 2.X, используется биб лиотека SQLite поддержки баз данных, встраиваемых в приложения, ко-торая в версии 3.X стала стандартной частью Python. К счастью, переносимый прикладной интерфейс Python позволяет сценариям взаимодействовать с обоими механизмами практически одинаково, поэтому такое изменение является весьма незначительной жертвой.

    Отдельно следует отметить использование расширения PIL для отображения изображений в формате JPEG в части, посвященной созданию графического интерфейса. Это расширение было адапти-ровано Фредриком Лундом (Fredrik Lundh) для версии Python 3.1 как раз к моменту подготовки этого издания. Когда я сдавал в из-дательство ок