Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Python - к вершинам мастерства: Лаконичное и эффективное программирование

Покупка
Артикул: 817277.01.99
Не тратьте зря времени, пытаясь подогнать Python под способы программирования, знакомые вам по другим языкам. Python настолько прост, что вы очень быстро станете продуктивным программистом, но зачастую это означает, что вы не в полной мере используете то, что может предложить язык. Второе издание книги позволит вам писать более эффективный и современный код на Python 3, обратив себе на пользу лучшие идеи. Издание предназначено практикующим программистам на Python, которыехотят усовершенствоваться в Python 3.
Рамальо, Л. Python - к вершинам мастерства: Лаконичное и эффективное программирование : практическое руководство / Л. Рамальо ; пер. с англ. А. А. Слинкина. - 2-е изд. - Москва : ДМК Пресс, 2022. - 898 с. - ISBN 978-5-97060-885-2. - Текст : электронный. - URL: https://znanium.com/catalog/product/2109578 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Лусиану Рамальо

Python – к вершинам 
мастерства

Лаконичное и эффективное программирование

Fluent Python

Clear, Concise, and Effective Programming

Luciano Ramalho

Second edition

Python – к вершинам 
мастерства

Лаконичное и эффективное программирование

Лусиану Рамальо

Москва, 2022

Второе издание

УДК 004.438Python:004.6
ББК  32.973.22
Р21

Лусиану Рамальо
Р21 
Python – к вершинам мастерства: Лаконичное и эффективное программирование / пер. с англ. А. А. Слинкина. 2-е изд. – М.: МК Пресс, 2022. – 
898 с.: ил.

ISBN 978-5-97060-885-2

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

УДК 004.438Python:004.6
ББК 32.973.22

Authorized Russian translation of the English edition of Fluent Python, 2nd Edition ISBN 
9781492056355 © 2021 Luciano Gama de Sousa Ramalho.
This translation is published and sold by permission of O’Reilly Media, Inc., which owns or 
controls all rights to publish and sell the same.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой 
бы то ни было форме и какими бы то ни было средствами без письменного разрешения 
владельцев авторских прав.

Copyright © 2021 Luciano Ramalho
© Оформление, издание, перевод, ДМК Пресс, 2022
ISBN  (анг.) 978-1-49205-635-5
ISBN  (рус.) 978-5-97060-885-2

Марте, с любовью

Оглавление

Предисловие от издательства ........................................................ 19
Отзывы и пожелания ........................................................................................19
Список опечаток ...............................................................................................19
Нарушение авторских прав .............................................................................19

Об авторе ........................................................................................... 20

Колофон ............................................................................................. 20

Предисловие ...................................................................................... 21
На кого рассчитана эта книга ..........................................................................21
На кого эта книга не рассчитана .....................................................................22
Пять книг в одной .............................................................................................22
Как организована эта книга .............................................................................22
Практикум .........................................................................................................24
Поговорим: мое личное мнение ......................................................................25
Сопроводительный сайт: fluentpython.com ....................................................25
Графические выделения ..................................................................................25
О примерах кода ...............................................................................................26
Как с нами связаться ........................................................................................26
Благодарности ..................................................................................................27
Благодарности к первому изданию .................................................................28

ЧАСТЬ I. СТРУКТУРЫ ДАННЫХ ........................................31

Глава 1. Модель данных в языке Python ...................................... 32
Что нового в этой главе ....................................................................................33
Колода карт на Python ......................................................................................33
Как используются специальные методы ........................................................36
Эмуляция числовых типов ...........................................................................37
Строковое представление ............................................................................40
Булево значение пользовательского типа ..................................................41
API коллекций ...............................................................................................41
Сводка специальных методов .........................................................................43
Почему len – не метод ......................................................................................45
Резюме ...............................................................................................................45
Дополнительная литература ............................................................................46

Глава 2. Массив последовательностей .......................................... 48
Что нового в этой главе ....................................................................................49
Общие сведения о встроенных последовательностях ...................................49
Списковое включение и генераторные выражения .......................................51
Списковое включение и удобочитаемость .................................................52
Сравнение спискового включения с map и filter ........................................53
Декартовы произведения ............................................................................54
Генераторные выражения ............................................................................55
Кортеж – не просто неизменяемый список ....................................................57
Кортежи как записи ......................................................................................57
Кортежи как неизменяемые списки ...........................................................58
Сравнение методов кортежа и списка ........................................................60
Распаковка последовательностей и итерируемых объектов .........................61
Распаковка с помощью * в вызовах функций и литеральных 
последовательностях ....................................................................................63
Распаковка вложенных объектов ................................................................63
Сопоставление с последовательностями-образцами ....................................64
Сопоставление с последовательностями-образцами  
в интерпретаторе .........................................................................................69
Получение среза ...............................................................................................72
Почему в срезы и диапазоны не включается последний элемент ............73
Объекты среза ...............................................................................................73
Многомерные срезы и многоточие .............................................................74
Присваивание срезу .....................................................................................75
Использование + и * для последовательностей ..............................................76
Построение списка списков .........................................................................76
Составное присваивание последовательностей .............................................78
Головоломка: присваивание A +=  ...............................................................79
Метод list.sort и встроенная функция sorted ..................................................81
Когда список не подходит ................................................................................83
Массивы ........................................................................................................83
Представления областей памяти .................................................................86
NumPy ............................................................................................................88
Двусторонние и другие очереди ..................................................................90
Резюме ...............................................................................................................93
Дополнительная литература ............................................................................94

Глава 3. Словари и множества ......................................................... 99
Что нового в этой главе ....................................................................................99
Современный синтаксис словарей ................................................................100
Словарные включения ...............................................................................100
Распаковка отображений ...........................................................................101
Объединение отображений оператором | .................................................102
Сопоставление с отображением-образцом ..................................................102
Стандартный API типов отображений ..........................................................105
Что значит «хешируемый»? .......................................................................105
Обзор наиболее употребительных методов отображений ......................106

Оглавление  7

Вставка и обновление изменяемых значений .........................................108
Автоматическая обработка отсутствующих ключей ...................................111
defaultdict: еще один подход к обработке отсутствия ключа ..................111
Метод __missing__ ........................................................................................112
Несогласованное использование __missing__  
в стандартной библиотеке .........................................................................114
Вариации на тему dict ....................................................................................115
collections.OrderedDict ................................................................................115
collections.ChainMap ...................................................................................116
collections.Counter ......................................................................................117
shelve.Shelf ..................................................................................................117
Создание подкласса UserDict вместо dict..................................................118
Неизменяемые отображения .........................................................................120
Представления словаря ..................................................................................121
Практические последствия внутреннего устройства класса dict ................122
Теория множеств ............................................................................................123
Литеральные множества ............................................................................125
Множественное включение .......................................................................126
Практические последствия внутреннего устройства класса set .................126
Операции над множествами......................................................................127
Теоретико-множественные операции над представлениями словарей ....129
Резюме .............................................................................................................131
Дополнительная литература ..........................................................................132

Глава 4. Unicode-текст и байты .....................................................135
Что нового в этой главе ..................................................................................136
О символах, и не только .................................................................................136
Все, что нужно знать о байтах .......................................................................137
Базовые кодировщики и декодировщики ....................................................140
Проблемы кодирования и декодирования ...................................................141
Обработка UnicodeEncodeError ..................................................................142
Обработка UnicodeDecodeError ..................................................................143
Исключение SyntaxError при загрузке модулей  
с неожиданной кодировкой .......................................................................144
Как определить кодировку последовательности байтов .........................145
BOM: полезный крокозябр .........................................................................146
Обработка текстовых файлов ........................................................................147
Остерегайтесь кодировок по умолчанию .................................................150
Нормализация Unicode для надежного сравнения ......................................155
Сворачивание регистра ..............................................................................158
Служебные функции для сравнения нормализованного текста .............158
Экстремальная «нормализация»: удаление диакритических знаков .....159
Сортировка Unicode-текстов ..........................................................................162
Сортировка с помощью алгоритма упорядочивания Unicode ................164
База данных Unicode .......................................................................................165
Поиск символов по имени .........................................................................165
Символы, связанные с числами.................................................................167

8  Оглавление

Двухрежимный API .........................................................................................168
str и bytes в регулярных выражениях ........................................................168
str и bytes в функциях из модуля os ..........................................................170
Резюме .............................................................................................................170
Дополнительная литература ..........................................................................171

Глава 5. Построители классов данных .........................................176
Что нового в этой главе ..................................................................................177
Обзор построителей классов данных ............................................................177
Основные возможности .............................................................................179
Классические именованные кортежи ...........................................................181
Типизированные именованные кортежи .....................................................184
Краткое введение в аннотации типов ...........................................................185
Никаких последствий во время выполнения ...........................................185
Синтаксис аннотаций переменных ..........................................................186
Семантика аннотаций переменных ..........................................................186
Инспекция typing.NamedTuple ..................................................................187
Инспектирование класса с декоратором dataclass ...................................188
Еще о @dataclass ............................................................................................190
Опции полей ...............................................................................................191
Постинициализация ...................................................................................194
Типизированные атрибуты класса ............................................................196
Инициализируемые переменные, не являющиеся полями ....................196
Пример использования @dataclass: запись о ресурсе  
из дублинского ядра ...................................................................................197
Класс данных как признак кода с душком ....................................................199
Класс данных как временная конструкция ..............................................201
Класс данных как промежуточное представление ..................................201
Сопоставление с экземплярами классов – образцами ................................201
Простые классы-образцы ...........................................................................202
Именованные классы-образцы .................................................................202
Позиционные классы-образцы .................................................................204
Резюме .............................................................................................................205
Дополнительная литература ..........................................................................205

Глава 6. Ссылки на объекты, изменяемость  
и повторное использование..........................................................209
Что нового в этой главе ..................................................................................210
Переменные – не ящики ................................................................................210
Тождественность, равенство и псевдонимы .................................................212

Выбор между == и is ....................................................................................213
Относительная неизменяемость кортежей ..............................................214
По умолчанию копирование поверхностное ................................................215
Глубокое и поверхностное копирование произвольных объектов .........218
Параметры функций как ссылки ...................................................................219
Значения по умолчанию изменяемого типа: неудачная мысль .............220
Защитное программирование при наличии изменяемых параметров ....222

Оглавление  9

del и сборка мусора .........................................................................................224
Как Python хитрит с неизменяемыми объектами ........................................226
Резюме .............................................................................................................228
Дополнительная литература ..........................................................................229

ЧАСТЬ II. ФУНКЦИИ КАК ОБЪЕКТЫ .............................233

Глава 7. Функции как полноправные объекты ...........................234
Что нового в этой главе ..................................................................................235
Обращение с функцией как с объектом ........................................................235
Функции высшего порядка ............................................................................236
Современные альтернативы функциям map, filter и reduce ....................237
Анонимные функции .....................................................................................239
Девять видов вызываемых объектов ............................................................240
Пользовательские вызываемые типы ...........................................................241
От позиционных к чисто именованным параметрам .................................242
Чисто позиционные параметры ................................................................244
Пакеты для функционального программирования .....................................245
Модуль operator ..........................................................................................245
Фиксация аргументов с помощью functools.partial .................................248
Резюме .............................................................................................................250
Дополнительная литература ..........................................................................250

Глава 8. Аннотации типов в функциях .........................................254
Что нового в этой главе ..................................................................................255
О постепенной типизации .............................................................................255
Постепенная типизация на практике ...........................................................256
Начинаем работать с Mypy .........................................................................257
А теперь построже ......................................................................................258
Значение параметра по умолчанию .........................................................258
None в качестве значения по умолчанию .................................................260
Типы определяются тем, какие операции они поддерживают ...................261
Типы, пригодные для использования в аннотациях....................................266
Тип Any ........................................................................................................266
«Является подтипом» и «совместим с» .....................................................267
Простые типы и классы ..............................................................................269
Типы Optional и Union ................................................................................269
Обобщенные коллекции ............................................................................270
Типы кортежей ...........................................................................................273
Обобщенные отображения ........................................................................275
Абстрактные базовые классы ....................................................................276
Тип Iterable ..................................................................................................278
Параметризованные обобщенные типы и TypeVar .................................280
Статические протоколы .............................................................................284
Тип Callable .................................................................................................288
Тип NoReturn...............................................................................................291
Аннотирование чисто позиционных и вариадических параметров ..........291

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