Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 5
Текст из файла (страница 5)
Эта книга предназначена дляпрограммистов, использующих ����������������������������������������������Python����������������������������������������2, Python������������������������������������������������������������������3, а также для тех, кто пользуется обеими версиями, т. е.
с помощью этой книги вы сможете изучить любую из основных версий языка Python.Основное внимание уделяется версии 3.0, тем не менее по ходу повествованиябудут отмечаться отличия, существующие в версии 2.6, и инструменты длятех, кому приходится сопровождать старые программы. Синтаксис языка программирования почти не изменился, однако имеется несколько важных отличий, о которых я также буду рассказывать по ходу изложения материала.Например, в большинстве примеров используется вызов функции print в стилеверсии 3.0, но при этом будет описываться использование инструкции print,присутствующей в версии 2.6, чтобы вы могли понимать программный код,написанный ранее. Кроме того, я представлю новые особенности языка, такиекак инструкция nonlocal, появившаяся в версии 3.0, и метод форматирования19Предисловиестрок format в версиях 2.6 и 3.0, а также укажу, какие расширения отсутствуют в более старых версиях Python.Если вы только приступаете к изучению языка Python������������������������������������������������������и не стоите перед необходимостью использовать устаревший программный код, я рекомендую начинать сразу с версии Python�������������������������������������������������������������������������������������������������������� 3.0; в этой версии были устранены многие давнишние недостатки языка, при этом было сохранено все самое лучшее и добавленынекоторые новые возможности.К тому времени, когда вы будете читать эти строки, многие популярные библиотеки и инструменты наверняка станут доступны и в версии Python 3.0,особенно если учесть улучшение производительности операций ввода-вывода,которое заявлено в ожидающейся версии 3.1.
Если вы используете программы, основанные на версии Python 2.X, вы обнаружите, что эта книга отвечаетвашим потребностям в настоящее время, а в дальнейшем поможет вам выполнить переход на версию 3.0.По большей части это издание книги может использоваться для изучения языка Python при использовании разных выпусков версий Python 2 и 3, однаконекоторые устаревшие версии интерпретатора из ветки 2.X могут оказаться нев состоянии выполнить программный код всех примеров, которые приводятсяздесь. Например, декораторы классов могут использоваться в обеих версияхPython�������������������������������������������������������������������� 2.6 и 3.0, но вы не сможете применять их в более старых версиях ���Python�������������������������������������������������������������������������� 2.�����������������������������������������������������������������������X����������������������������������������������������������������������, где эта особенность языка отсутствует.
Ниже, в табл. П.1 и П.2, приводятся основные отличия между версиями 2.6 и 3.0.Незадолго до передачи книги в печать она была дополнена примечаниями о наиболее существенных расширениях языка, появившихся в версии Python 3.1: использование запятых в качестве разделителей и автоматическая нумерация полей в вызовахстрокового метода format, синтаксис множественных менеджеров контекста в инструкциях with, новые методы чисел и так далее. Основная цель версии Python 3.1 – оптимизация скоростивыполнения, поэтому данная книга также охватывает и эту новую версию.
Фактически версия Python 3.1 выпускается как замена версии 3.0. Кроме того, последняя версия Python обычновсегда самая лучшая. Поэтому в этой книге термин «Python 3.0»практически везде используется для обозначения не конкретнойверсии, а изменений в языке, введенных в версии Python 3.0и присутствующих во всех версиях ветки 3.X.Новые главыОсновная цель этого издания – обновить примеры и сведения, приводившиеся в предыдущем издании и касающиеся версий Python 3.0 и 2.6. Кроме того,я добавил пять новых глав, описывающих новые особенности:•• Глава 27 – новое руководство по классам, где приведен более реалистичныйпример, демонстрирующий основы объектно-ориентированного программирования (ООП) на языке Python.•• Глава 36 подробно рассказывает о строках Юникода и строках байтов,а также описывает отличия строк и файлов в версиях 3.0 и 2.6.20Предисловие•• Глава 37 описывает средства управления атрибутами, такие как свойства,и содержит новые сведения о дескрипторах.•• Глава 38 представляет декораторы функций и классов и содержит подробные и исчерпывающие примеры.•• Глава 39 охватывает метаклассы и сравнивает их с декораторами.Первая из этих глав представляет собой подробное пошаговое руководство поиспользованию классов и приемов ООП в языке ����������������������������Python����������������������.
Она основана на примерах, используемых на учебных курсах и адаптированных для книги. Этаглава призвана продемонстрировать применение ООП в более приближенномк реальности контексте, чем в предыдущих изданиях, и показать, как можетиспользоваться концепция классов для построения крупных программ. Я надеюсь, что эти примеры будут полезны настолько же, насколько они полезнына учебных курсах.Последние четыре главы в этом списке составляют заключительную частькниги «Расширенные возможности». С технической точки зрения эти темы относятся к основам языка программирования, тем не менее многие программисты используют простые строки символов ASCII и не нуждаются в детальномизучении строк Юникода и строк с двоичными данными.
Точно так же декораторы и метаклассы являются узкоспециализированными темами, представляющими интерес скорее для разработчиков программных интерфейсов, чемдля прикладных программистов. Поэтому эти четыре главы были выделеныв отдельную часть и не являются обязательными для чтения.Если же вы используете эти возможности или сопровождаете программы, в которых они применяются, эти новые главы должны помочь вам освоить их.
Кроме того, примеры в этих главах соединяют разнообразные базовые концепцииязыка и имеют большое практическое значение. В конце каждой главы имеются контрольные вопросы, но отсутствуют упражнения, так как эта часть неявляется обязательной для прочтения.Изменения в существующем материалеПомимо всего прочего была проведена реорганизация материала предыдущего издания, добавлены новые примеры. Так, в главе 30 в описание механизмамножественного наследования был включен новый пример вывода деревьевклассов; в главу 20 были добавлены новые примеры использования генераторов для реализации собственных версий функций map и zip; в главу 31 быливключены новые примеры, иллюстрирующие статические методы и методыклассов; в главе 23 демонстрируется операция импортирования относительнопакета, а в главу 29 были добавлены примеры, иллюстрирующие методы __contains__, __bool__ и __index__ перегрузки операторов и использование новогопротокола перегрузки для операций извлечения среза и сравнения.Дополнительно была проведена реорганизация материала с целью добиться более последовательного изложения.
Например, чтобы добавить новые сведенияи избежать перегруженности, каждая из пяти вышеупомянутых глав быларазбита на две главы. В результате появились новые самостоятельные главы,посвященные перегрузке операторов, областям видимости и аргументам, особенностям обработки исключений, а также генераторам и итераторам. Былнемного изменен порядок следования существующих глав, чтобы обеспечитьболее последовательное освещение тем.21ПредисловиеВ этом издании также была предпринята попытка ликвидировать ссылки набудущие темы за счет переупорядочения глав, однако в некоторых случаях этооказалось невозможным из-за изменений в �������������������������������Python������������������������� 3.0: для полного понимания особенностей вывода строк и метода format вам потребуется знакомствос именованными аргументами функций; чтобы понять, как получить списокключей словаря и как проверить наличие того или иного ключа, необходимознакомство с итераторами; чтобы научиться использовать функцию exec длявыполнения программного кода, необходимо уметь применять объекты файлов, и так далее.
Читать книгу по-прежнему предпочтительнее по порядку, однако иногда может потребоваться забежать вперед.В общей сложности в этом издании было выполнено несколько сотен изменений. Одни только таблицы в следующем разделе описывают 27 дополненийи 57 изменений в языке Python. Справедливости ради следует отметить, чтоэто издание стало более продвинутым, потому что сам язык Python стал болеепродвинутым.Расширения языка, появившиесяв версиях 2.6 и 3.0Вообще говоря, Python версии 3.0 стал более цельным, но он также стал в некотором роде и более сложным. На первый взгляд некоторые из измененийпредполагают, что для изучения языка Python вы уже должны быть знакомыс ним! В предыдущем разделе уже были упомянуты некоторые темы, которыесвязаны круговой зависимостью в версии 3.0, например объяснение темы представлений словарей практически невозможно без наличия предварительныхзнаний. Помимо обучения основам языка ���������������������������������Python���������������������������эта книга послужит подспорьем в заполнении подобных пробелов в ваших представлениях.В табл. П.1 перечислены наиболее заметные новые особенности языка и номераглав, в которых они описываются.Таблица П.1.
Нововведения в версиях Python 2.6 и 3.0НововведениеСм. главыФункция print в версии 3.011Инструкция nonlocal в версии 3.017Метод str.format в версиях 2.6 и 3.07Строковые типы в версии 3.0: str – для представления строкЮникода, bytes – для представления двоичных данных7, 36Отличия между текстовыми и двоичными файлами в версии 3.09, 36Декораторы классов в версиях 2.6 и 3.0: @private(‘age’)31, 38Новые итераторы в версии 3.0: range, map, zip14, 20Представления словарей в версии 3.0: D.keys, D.values, D.items8, 14Операторы деления в версии 3.0: остаток, / и //522ПредисловиеТаблица П.1 (продолжение)НововведениеСм. главыЛитералы множеств в версии 3.0: {a, b, c}5Генераторы множеств в версии 3.0: {x**2 for x in seq}4, 5, 14, 20Генераторы словарей в версии 3.0: {x: x**2 for x in seq}4, 5, 14, 20Поддержка представления двоичных чисел в виде строк в версиях 2.6 и 3.0: 0b0101, bin(I)5Тип представления рациональных чисел в версиях 2.6 и 3.0:Fraction(1, 3)5Аннотации функций в версии 3.0: def f(a:99, b:str)->int19Аргументы, которые могут быть только именованными в версии 3.0: def f(a, *b, c, **d)18, 20Расширенная операция распаковывания последовательностейв версии 3.0: a, *b = seq11, 13Синтаксис импортирования относительно пакета в версии 3.0:from .23Менеджеры контекста в версиях 2.6 и 3.0: with/as33, 35Синтаксис исключений в версии 3.0: raise, except/as, суперклассы33, 34Объединение исключений в цепочки в версии 3.0:raise e2 from e133Изменения в наборе зарезервированных слов в версиях 2.6и 3.011Переход на использование классов «нового стиля» в версии 3.0 31Декораторы свойств в версиях 2.6 и 3.0: @property37Дескрипторы в версиях 2.6 и 3.031, 38Метаклассы в версиях 2.6 и 3.031, 39Поддержка абстрактных базовых классов в версиях 2.6 и 3.028Особенности языка, удаленные в версии 3.0Помимо дополнений в версии 3.0 некоторые особенности языка были удаленыс целью сделать его синтаксис более стройным.