Программирование на Python 3. Руководство издательство СимволПлюс
Скачать 3.74 Mb.
|
8. Усовершенствованные приемы программирования . . . . . . . . . . 394 Улучшенные приемы процедурного программирования . . . . . . . . . . . 395 Ветвление с использованием словарей . . . . . . . . . . . . . . . . . . . . . . . . 395 Выражениягенераторы и функциигенераторы . . . . . . . . . . . . . . . 397 Динамическое выполнение программного кода и динамическое импортирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Локальные и рекурсивные функции . . . . . . . . . . . . . . . . . . . . . . . . . 409 Декораторы функций и методов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Аннотации функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Улучшенные приемы объектноориентированного программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Управление доступом к атрибутам . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 Функторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 Менеджеры контекста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 Дескрипторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Декораторы классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438 Абстрактные базовые классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 Множественное наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Метаклассы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 Функциональное программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Частично подготовленные функции . . . . . . . . . . . . . . . . . . . . . . . . . . 460 Пример: Valid.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Оглавление 11 9. Процессы и потоки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 Делегирование работы процессам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Делегирование работы потокам выполнения . . . . . . . . . . . . . . . . . . . . . 473 Пример: многопоточная программа поиска слова . . . . . . . . . . . . . . 475 Пример: многопоточная программа поиска дубликатов файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 10. Сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Клиент TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 Сервер TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 11. Программирование приложений баз данных . . . . . . . . . . . . . . . . 508 Базы данных DBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Базы данных SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Упражнение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 12. Регулярные выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 Язык регулярных выражений в Python . . . . . . . . . . . . . . . . . . . . . . . . . 525 Символы и классы символов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 Квантификаторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Группировка и сохранение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 Проверки и флаги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 Модуль для работы с регулярными выражениями . . . . . . . . . . . . . . . . 538 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 13. Введение в программирование графического интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Программы в виде диалога . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 Программы с главным окном . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 Создание главного окна . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 Создание собственного диалога . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 Эпилог . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 Введение Язык Python является, пожалуй, самым простым в изучении и самым приятным в использовании из языков программирования, получив ших широкое распространение. Программный код на языке Python легко читать и писать, и, будучи лаконичным, он не выглядит зага дочным. Python – очень выразительный язык, позволяющий уместить приложение в меньшее количество строк, чем на это потребовалось бы в других языках, таких как C++ или Java. Python является кроссплатформенным языком: обычно одна и та же программа на языке Python может запускаться и в Windows, и в UNIX подобных системах, таких как Linux, BSD и Mac OS, для чего достаточ но просто скопировать файл или файлы, составляющие программу, на нужный компьютер; при этом даже не потребуется выполнять «сбор ку», или компилирование программы. Конечно, можно написать на языке Python программу, которая будет использовать некоторые ха рактерные особенности конкретной операционной системы, но такая необходимость возникает крайне редко, т. к. практически вся стан дартная библиотека языка Python и большинство библиотек сторон них производителей обеспечивают полную кроссплатформенность. Одним из основных преимуществ языка Python является наличие пол ной стандартной библиотеки, позволяющей обеспечить загрузку фай ла из Интернета, распаковку архива или создание вебсервера посред ством написания нескольких строк программного кода. В дополнение к ней существуют тысячи дополнительных библиотек сторонних про изводителей, среди которых одни обеспечивают более сложные и более мощные возможности, чем стандартная – например, библиотека для организации сетевых взаимодействий Twisted и библиотека для реше ния вычислительных задач NumPy; а другие предоставляют функцио нальность, которая слишком узконаправленно специализирована, чтобы ее можно было включить в стандартную библиотеку – напри мер, пакет моделирования SimPy. Большинство сторонних библиотек можно найти на сайте Python Package Index (каталог пакетов Python): pypi.python.org/pypi Python может использоваться для программирования в процедурном, в объектноориентированном и, в меньшей степени, в функциональ ном стиле программирования, хотя в глубине души Python – объект ноориентированный язык программирования. Эта книга покажет, 14 Введение как писать процедурные и объектноориентированные программы, а также расскажет об особенностях функционального программирова ния на языке Python. Цель этой книги – показать вам, как писать программы на языке Py thon в стиле Python 3, а после прочтения – служить хорошим справоч ником по этому языку. Несмотря на то, что версия Python 3 является эволюционным, а не революционным усовершенствованием Python 2, тем не менее в Python 3 некоторые прежние приемы программирова ния стали неприменимы или в них отпала необходимость. При этом появились некоторые новые приемы, позволяющие использовать пре имущества особенностей новой версии. Язык Python 3 более соверше нен, чем Python 2 – он основан на опыте многих лет использования этого языка и привносит множество новых особенностей (и ликвиди рует недостатки Python 2), делая его еще более приятным в использо вании, более удобным, более простым и более последовательным. Цель книги – научить языку Python, при этом в книге используются многие стандартные библиотеки, но далеко не все. Впрочем, это не проблема, так как после прочтения этой книги вы будете обладать объ емом знаний, достаточным, чтобы суметь воспользоваться любыми стандартными или сторонними библиотеками языка Python и даже создавать свои собственные библиотечные модули. Как предполагается, книга будет полезна различным группам читате лей, включая тех, для кого программирование – это хобби, а также студентов, научных работников, инженеров и всех тех, для кого про граммирование является подручным средством в их работе, и, конеч но же, – профессиональных программистов. Чтобы быть полезной та кому широкому кругу читателей – не быть скучной для хорошо подго товленных специалистов и одновременно оставаться доступной для менее подготовленных читателей, книга предполагает наличие у чита теля некоторого опыта программирования (на любом языке). В частно сти, предполагается наличие основных представлений о типах данных (таких как числа и строки), коллекциях данных (таких как множест ва и списки), управляющих структурах (таких как инструкции if и while) и функциях. Кроме того, некоторые примеры предполагают знание основ языка разметки HTML, а некоторые, более специализи рованные главы предполагают наличие базовых знаний по обсуждае мым темам, например, глава о базах данных предполагает знакомство с языком SQL. Книга структурирована таким образом, чтобы вы могли быстро дви гаться вперед. К концу первой главы вы уже сможете писать неболь шие, но полезные программы на языке Python. Каждая последующая глава вводит новые темы и часто расширяет и углубляет темы, введен ные в предыдущих главах. Это означает, что если вы читаете главы по следовательно, вы сможете остановиться в любой момент и написать законченную программу на основе знаний, полученных к этому мо Введение 15 менту, после чего продолжить чтение и узнать о существовании более совершенных и более сложных приемов. По этой причине знакомство с некоторыми темами происходит в одной главе, а более глубокое их исследование – в последующих главах. При изучении нового языка программирования обычно возникают две основные проблемы. Первая заключается в том, что иногда для объяс нения одной концепции необходимо знать другую концепцию, кото рая, в свою очередь, прямо или косвенно опирается на первую. Вторая проблема состоит в том, что некоторые читатели изначально могут ни чего не знать о данном языке программирования, и изза этого бывает очень трудно подыскать интересные или полезные примеры. В этой книге предпринята попытка решить обе проблемы, вопервых, предпо ложив наличие у читателя некоторого опыта программирования, и, во вторых, представив в главе 1 «золотой запас» языка Python – восемь основных составляющих языка, знания которых вполне достаточно, чтобы начать самостоятельно писать программы. Вследствие принято го подхода некоторые примеры в первых главах отличаются опреде ленной долей искусственности, так как в них используется только то, о чем до этого уже говорилось в книге. От главы к главе этот эффект уменьшается и полностью исчезает к главе 7; все последующие приме ры полностью написаны в характерном для языка Python 3 стиле. Книга опирается на практический подход в обучении и предлагает вам самостоятельно опробовать примеры и упражнения, чтобы приобрести практический опыт. Везде, где только возможно, в качестве примеров приводятся небольшие законченные программы, способные решать вполне реальные задачи. Все примеры и решения упражнений можно найти в Интернете по адресу www.qtrac.eu/py3book.html – каждый из них протестирован с использованием Python 3 в операционных систе мах Windows, Linux и Mac OS X. Структура книги В главе 1 будут представлены 8 составляющих языка Python, знания которых будет вполне достаточно для написания законченных про грамм. Здесь также описываются некоторые среды программирования на языке Python и приводятся два примера маленьких программ, в ка ждой из которых используются восемь составляющих языка Python, описанные ранее в этой главе. В главах со 2 по 5 вводятся средства процедурного программирования на языке Python, включая базовые типы данных и коллекции данных, а также множество полезных встроенных функций и структур управ ления наряду с описанием простейших приемов обработки текстовых файлов. В главе 5 рассказывается, как создавать собственные модули и пакеты, и проводится общий обзор стандартной библиотеки Python, чтобы вы получили представление о том, что может предложить Python 16 Введение «из коробки», и могли избежать необходимости заново изобретать ко лесо. Глава 6 представляет собой полное введение в объектноориентирован ное программирование на языке Python. Все сведения о процедурном программировании, которые были получены в предыдущих главах, попрежнему применимы, потому что объектноориентированное про граммирование имеет процедурную основу: например, в объектно ориентированном программировании используются те же самые типы данных, коллекции данных и управляющие структуры. Глава 7 охватывает темы записи в файлы и чтения из файлов. Для дво ичных файлов среди всего прочего рассматривается применение опе раций сжатия и произвольного доступа к содержимому файлов, а для текстовых файлов – синтаксический анализ вручную и с применением регулярных выражений. Кроме того, в этой главе будет показано, как писать и читать файлы в формате XML, включая использование эле ментов деревьев, DOM (Document Object Model – объектная модель до кумента) и SAX (Simple API for XML – простой прикладной программ ный интерфейс для работы с XML). В главе 8 повторно рассматривается материал, представленный в неко торых предыдущих главах, и исследуются многие современные осо бенности языка Python в таких областях, как типы данных, коллек ции данных, управляющие структуры, функции и объектноориенти рованное программирование. В этой главе также будет представлено множество новых функций, классов и усовершенствованных приемов, включая функциональное программирование – материал, который бу дет и полезен, и необходим. В остальной части книги рассматриваются более сложные темы. В гла ве 9 демонстрируются приемы распределения рабочей нагрузки меж ду несколькими процессами и потоками выполнения. Глава 10 расска зывает, как создавать клиентсерверные приложения, используя стан дартную поддержку сетевых взаимодействий языка Python. Глава 11 охватывает вопросы программирования приложений для работы с ба зами данных (как с простыми файлами «DBM», хранящими пары ключзначение, так и с базами данных SQL). Глава 12 описывает и де монстрирует применение миниязыка регулярных выражений в Py thon и охватывает модуль регулярных выражений, а в главе 13 рас сматриваются вопросы программирования GUI (Graphical User Inter face – графический интерфейс пользователя). Большинство глав в книге достаточно объемны, объединяя взаимосвя занные сведения в одном месте для упрощения их поиска в будущем. Кроме того, главы разбиты на разделы, подразделы, а иногда и под подразделы, что позволяет читать их в том темпе, который устроит вас больше всего, – например, по одному разделу или подразделу за раз. Введение 17 Получение и установка Python 3 Если в вашем распоряжении имеется современная операционная сис тема Mac или другая UNIXподобная система, то вполне возможно, что Python 3 у вас уже установлен. Проверить это можно, введя коман ду python – V (обратите внимание, что символ V вводится в верхнем реги стре) в консоли (Terminal.app – в Mac OS X). Если будет выведен номер версии 3, значит Python 3 у вас уже имеется и выполнять его установ ку не требуется, в противном случае вам следует продолжить чтение этого раздела. Для операционных систем Windows и Mac OS X существуют простые в использовании установочные пакеты с графическим интерфейсом, которые проведут вас через все этапы процесса установки. Эти пакеты доступны по адресу www.python.org/download. Для Windows по ука занному адресу имеется три различных инсталлятора; загружайте тот, который подписан «Windows installer», если заранее вам точно не известно, что ваша машина оснащена процессором AMD64 или Itani um; в противном случае загружайте версию для своего процессора. Как только установочный пакет будет загружен, просто запустите его и следуйте инструкциям, появляющимся на экране. Для Linux, BSD и других версий UNIX самый простой способ устано вить Python состоит в том, чтобы воспользоваться имеющейся систе мой управления пакетами. В большинстве случаев Python поставляет ся в виде отдельных пакетов. Например, для Fedora Python поставляет ся в виде пакета python, а IDLE (простая среда разработки) – в виде па кета pythontools; при этом будьте внимательны: эти пакеты содержат Python 3, только если ваша версия Fedora достаточно свежая (вер сии 10 или выше). Аналогично в дистрибутивах на основе Debian, таких как Ubuntu, эти пакеты называются python3 и idle3 соответственно. Если для вашей операционной системы пакеты с Python 3 отсутству ют, то вам потребуется загрузить исходные тексты по адресу www.py thon.org/download и собрать Python 3 из исходных текстов. Загрузите тарболл с исходными текстами и распакуйте его либо командой tar xvfz Python3.0.tgz , если тарболл сжат архиватором gzip, либо коман дой tar xvfj Python3.0.tar.bz2, если тарболл сжат архиватором bzip2. Конфигурирование и сборка выполняются стандартным способом. Сначала перейдите во вновь созданный каталог Python3.0 с распако ванными исходными текстами и запустите команду ./configure. (Если вы хотите выполнить установку в свой локальный каталог, можно оп ределить значение параметра –– prefix .) Затем запустите команду make. Вполне возможно, что в конце сборки вы получите сообщение о том, что не все модули удалось собрать. Обычно это означает, что у вас от сутствуют необходимые для этого библиотеки или заголовочные фай лы. Например, если не удалось собрать модуль readline, воспользуй тесь системой управления пакетами и установите соответствующую |