Программирование на Python 3. Руководство издательство СимволПлюс
Скачать 3.74 Mb.
|
МАРК САММЕРФИЛД ПРОГР АММИРОВАНИЕ НА ПОДРОБНОЕ РУКОВОДСТВО Издательство «СимволПлюс» (812) 3245353, (495) 9458100 www.symbol.ru Óðîâåíü ïîäãîòîâêè ÷èòàòåëåé: ñðåäíèé Êàòåãîðèÿ: ïðîãðàììèðîâàíèå / Python Марк Саммерфилд дипломированный специалист в области информатики, обладаю щий многолетним опытом работы в индустрии производства ПО, но в первую очередь – практикую щий программист. Почти три года он работал менеджером отдела до кументирования в компании Troll tech, руководил техническим жур налом «Qt Quarterly» этой компа нии . (В настоящее время Trolltech является подразделением Qt Soft ware в компании Nokia.) Марк является автором книги «Rapid GUI Programming with Py thon and Qt: The Definitive Guide to PyQt Programming» (Addison Wesley, 2008), а также соавтором «C++ GUI Programming with Qt 4» (AddisonWesley, 2006). Марк владеет собственной кон салтинговой и тренинговой компа нией Qtrac Ltd., где работает в ка честве независимого автора, ре дактора, преподавателя и консуль танта, специализируясь на C++, Qt, Python и PyQt. Третья версия языка Python сделала его еще более мощ ным, удобным, логичным и выразительным. Книга «Про граммирование на Python 3» написана одним из ведущих специалистов по этому языку, обладающим многолетним опытом работы с ним. Издание содержит все необходи мое для практического освоения языка: написания любых программ с использованием как стандартной библиотеки, так и сторонних библиотек для языка Python 3, а также создания собственных библиотечных модулей. Автор начинает с описания ключевых элементов Py thon, знание которых необходимо в качестве базовых по нятий. Затем обсуждаются более сложные темы, поданные так, чтобы читатель мог постепенно наращивать свой опыт. В книге рассматриваются: • Разработка ПО на языке Python с использованием про цедурной, объектноориентированной и функциональ ной парадигм • Создание собственных пакетов и модулей • Запись и чтение двоичных и текстовых файлов, а также файлов в формате XML, включая возможность дополни тельного сжатия, произвольного доступа и парсинга • Использование возможностей сложных типов данных, коллекций, управляющих структур и функций • Распределение вычислительной нагрузки между несколь кими процессами и потоками выполнения • Создание приложений для работы с базами данных SQL и с файлами DBM, в которых информация хранится в виде пар ключзначение • Использование миниязыка и модуля регулярных вы ражений в языке Python • Создание удобных, эффективных приложений с гра фическим интерфейсом • Передовые приемы программирования, включая гене раторы, декораторы функций и классов, менеджеры контекста, дескрипторы, абстрактные базовые классы, метаклассы и многое другое Книга может служить как учебником, так и справочни ком. Текст сопровождается многочисленными примерами, доступными на специальном сайте издания. Весь код при меров был протестирован с окончательным релизом Py thon 3 в ОС Windows, Linux и Mac OS X. ,6%1 P ython 3 Mark Summerfield Python 3 Programming in A Complete Introduction to the Python Language Марк Саммерфилд на Python 3 СанктПетербург–Москва 2009 Подробное руководство Программирование Серия «High tech» Марк Саммерфилд Программирование на Python 3 Подробное руководство Перевод А. Киселева Главный редактор А. Галунов Зав. редакцией Н. Макарова Выпускающий редактор П. Щеголев Редактор Ю. Бочина Корректор С. Николаева Верстка Д. Орлова Саммерфилд М. Программирование на Python 3. Подробное руководство. – Пер. с англ. – СПб.: СимволПлюс, 2009. – 608 с., ил. ISBN: 9785932861615 Третья версия языка Python сделала его еще более мощным, удобным, логич ным и выразительным. Книга «Программирование на Python 3» написана од ним из ведущих специалистов по этому языку, обладающим многолетним опытом работы с ним. Издание содержит все необходимое для практического освоения языка: написания любых программ с использованием как стандарт ной библиотеки, так и сторонних библиотек для языка Python 3, а также со здания собственных библиотечных модулей. Автор начинает с описания ключевых элементов Python, знание которых необ ходимо в качестве базовых понятий. Затем обсуждаются более сложные темы, поданные так, чтобы читатель мог постепенно наращивать свой опыт: распре деление вычислительной нагрузки между несколькими процессами и потока ми, использование сложных типов данных, управляющих структур и функ ций, создание приложений для работы с базами данных SQL и с файлами DBM. Книга может служить как учебником, так и справочником. Текст сопровожда ется многочисленными примерами, доступными на специальном сайте изда ния. Весь код примеров был протестирован с окончательным релизом Python 3 в ОС Windows, Linux и Mac OS X. ISBN: 9785932861615 ISBN: 9780137129294 (англ) © Издательство СимволПлюс, 2009 Authorized translation of the English edition © 2009 Pearson Education, Inc. This translation is published and sold by permission of Pearson Education, Inc., the owner of all rights to publish and sell the same. Все права на данное издание защищены Законодательством РФ, включая право на полное или час тичное воспроизведение в любой форме. Все товарные знаки или зарегистрированные товарные зна ки, упоминаемые в настоящем издании, являются собственностью соответствующих фирм. Издательство «СимволПлюс». 199034, СанктПетербург, 16 линия, 7, тел. (812) 3245353, www.symbol.ru. Лицензия ЛП N 000054 от 25.12.98. Налоговая льгота – общероссийский классификатор продукции ОК 00593, том 2; 953000 – книги и брошюры. Подписано в печать 29.04.2009. Формат 70х100 1 /16 . Печать офсетная. Объем 38 печ. л. Тираж 1500 экз. Заказ № Отпечатано с готовых диапозитивов в ГУП «Типография «Наука» 199034, СанктПетербург, 9 линия, 12. Памяти Франко Рабайотти (Franco Rabaiotti) 1961–2001 Оглавление Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1. Быстрое введение в процедурное программирование . . . . . . . . . 21 Создание и запуск программ на языке Python . . . . . . . . . . . . . . . . . . . . . 22 «Золотой запас» Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Составляющая №1: Типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Составляющая №2: ссылки на объекты . . . . . . . . . . . . . . . . . . . . . . . . 29 Составляющая №3: коллекции данных . . . . . . . . . . . . . . . . . . . . . . . . 32 Составляющая №4: логические операции . . . . . . . . . . . . . . . . . . . . . . 36 Составляющая №5: инструкции управления потоком выполнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Составляющая №6: арифметические операторы . . . . . . . . . . . . . . . . . 45 Составляющая №7: ввод/вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Составляющая №8: создание и вызов функций . . . . . . . . . . . . . . . . . 52 Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 bigdigits.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 generate_grid.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2. Типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Идентификаторы и ключевые слова . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Целочисленные типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Целые числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Логические значения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Тип чисел с плавающей точкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Числа с плавающей точкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Комплексные числа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Числа типа Decimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Сравнение строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Получение срезов строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Операторы и методы строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 8 Оглавление Форматирование строк с помощью метода str.format() . . . . . . . . . 100 Кодировки символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 quadratic.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 csv2html.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 3. Типы коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Последовательности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Именованные кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Множества . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Тип set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Тип frozenset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Словари . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Словари со значениями по умолчанию . . . . . . . . . . . . . . . . . . . . . . . 161 Обход в цикле и копирование коллекций . . . . . . . . . . . . . . . . . . . . . . . . 163 Итераторы, функции и операторы для работы с итерируемыми объектами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Копирование коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 generate_usernames.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 statistics.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 4. Управляющие структуры и функции . . . . . . . . . . . . . . . . . . . . . . . . . 188 Управляющие структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Условное ветвление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Циклы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Обработка исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Перехват и возбуждение исключений . . . . . . . . . . . . . . . . . . . . . . . . . 193 Собственные исключения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Собственные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Имена и строки документирования . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Распаковывание аргументов и параметров . . . . . . . . . . . . . . . . . . . . 210 Доступ к переменным в глобальной области видимости . . . . . . . . . 213 Лямбдафункции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Утверждения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Пример: make_html_skeleton.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Оглавление 9 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 5. Модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Модули и пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Собственные модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Обзор стандартной библиотеки языка Python . . . . . . . . . . . . . . . . . . . . 248 Обработка строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Работа с аргументами командной строки . . . . . . . . . . . . . . . . . . . . . . 250 Математические вычисления и числа . . . . . . . . . . . . . . . . . . . . . . . . . 252 Время и дата . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Алгоритмы и типы коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Форматы файлов, кодировки и сохранение данных . . . . . . . . . . . . . 256 Работа с файлами, каталогами и процессами . . . . . . . . . . . . . . . . . . 260 Работа с сетями и Интернетом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Прочие модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Упражнение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 6. Объектноориентированное программирование . . . . . . . . . . . . . 273 Объектноориентированный подход . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Объектноориентированные концепции и терминология . . . . . . . . 275 Собственные классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Атрибуты и методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 Наследование и полиморфизм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Использование свойств для управления доступом к атрибутам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Создание полных и полностью интегрированных типов данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Собственные классы коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Создание классов, включающих коллекции . . . . . . . . . . . . . . . . . . . 306 Создание классов коллекций посредством агрегирования . . . . . . . 314 Создание классов коллекций посредством наследования . . . . . . . . 321 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 7. Работа с файлами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Запись и чтение двоичных данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Консервирование с возможным сжатием . . . . . . . . . . . . . . . . . . . . . 341 Неформатированные двоичные данные с возможным сжатием . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 10 Оглавление Запись и синтаксический анализ текстовых файлов . . . . . . . . . . . . . . 356 Запись текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Синтаксический анализ текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Синтаксический анализ текста с помощью регулярных выражений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Запись и синтаксический анализ файлов XML . . . . . . . . . . . . . . . . . . . 364 Деревья элементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 DOM (Document Object Model – объектная модель документа) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Запись файла XML вручную . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Синтаксический анализ файлов XML с помощью SAX (Simple API for XML – упрощенный API для XML) . . . . . . . . . . . . . 373 Произвольный доступ к двоичным данным в файлах . . . . . . . . . . . . . . 376 Универсальный класс BinaryRecordFile . . . . . . . . . . . . . . . . . . . . . . . 377 Пример: классы в модуле BikeStock . . . . . . . . . . . . . . . . . . . . . . . . . . 386 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 |