Python. К вершинам мастерства: Локаничное и эффективное программирование. 2 изд

Python. К вершинам мастерства: Локаничное и эффективное программирование. 2 изд

Python. К вершинам мастерства: Локаничное и эффективное программирование. 2 изд
Автор: Рамальо Лучано
Переводчик: Слинкина А. А.
Дата выхода: 2022
Издательство: ДМК Пресс
Количество страниц: 898
Размер файла: 8.2 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

Предисловие от издательства....18

Отзывы и пожелания....18

Список опечаток....18

Нарушение авторских прав....18

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

Колофон....19

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

На кого рассчитана эта книга....20

На кого эта книга не рассчитана....21

Пять книг в одной....21

Как организована эта книга....21

Практикум....23

Поговорим: мое личное мнение....24

Сопроводительный сайт: fluentpython.com....24

Графические выделения....24

О примерах кода....25

Как с нами связаться....25

Благодарности....26

Благодарности к первому изданию....27

Часть I....30

Структуры данных....30

Глава 1....31

Модель данных в языке Python....31

Что нового в этой главе....32

Колода карт на Python....32

Как используются специальные методы....35

Эмуляция числовых типов....36

Строковое представление....39

Булево значение пользовательского типа....40

API коллекций....40

Сводка специальных методов....42

Почему len – не метод....44

Резюме....44

Дополнительная литература....45

Глава 2....47

Массив последовательностей....47

Что нового в этой главе....48

Общие сведения о встроенных последовательностях....48

Списковое включение и генераторные выражения....50

Списковое включение и удобочитаемость....51

Сравнение спискового включения с map и filter....52

Декартовы произведения....53

Генераторные выражения....54

Кортеж – не просто неизменяемый список....56

Кортежи как записи....56

Кортежи как неизменяемые списки....57

Сравнение методов кортежа и списка....59

Распаковка последовательностей и итерируемых объектов....60

Распаковка с помощью * в вызовах функций и литеральных последовательностях....62

Распаковка вложенных объектов....62

Сопоставление с последовательностями-образцами....63

Сопоставление с последовательностями-образцами в интерпретаторе....68

Получение среза....71

Почему в срезы и диапазоны не включается последний элемент....72

Объекты среза....72

Многомерные срезы и многоточие....73

Присваивание срезу....74

Использование + и * для последовательностей....75

Построение списка списков....75

Составное присваивание последовательностей....77

Головоломка: присваивание A += ....78

Метод list.sort и встроенная функция sorted....80

Когда список не подходит....82

Массивы....82

Представления областей памяти....85

NumPy....87

Двусторонние и другие очереди....89

Резюме....92

Дополнительная литература....93

Глава 3....98

Словари и множества....98

Что нового в этой главе....98

Современный синтаксис словарей....99

Словарные включения....99

Распаковка отображений....100

Объединение отображений оператором |....101

Сопоставление с отображением-образцом....101

Стандартный API типов отображений....104

Что значит «хешируемый»?....104

Обзор наиболее употребительных методов отображений....105

Вставка и обновление изменяемых значений....107

Автоматическая обработка отсутствующих ключей....110

defaultdict: еще один подход к обработке отсутствия ключа....110

Метод __missing__....111

Несогласованное использование __missing__ в стандартной библиотеке....113

Вариации на тему dict....114

collections.OrderedDict....114

collections.ChainMap....115

collections.Counter....116

shelve.Shelf....116

Создание подкласса UserDict вместо dict....117

Неизменяемые отображения....119

Представления словаря....120

Практические последствия внутреннего устройства класса dict....121

Теория множеств....122

Литеральные множества....124

Множественное включение....125

Практические последствия внутреннего устройства класса set....125

Операции над множествами....126

Теоретико-множественные операции над представлениями словарей....128

Резюме....130

Дополнительная литература....131

Глава 4....134

Unicode-текст и байты....134

Что нового в этой главе....135

О символах, и не только....135

Все, что нужно знать о байтах....136

Базовые кодировщики и декодировщики....139

Проблемы кодирования и декодирования....140

Обработка UnicodeEncodeError....141

Обработка UnicodeDecodeError....142

Исключение SyntaxError при загрузке модулей с неожиданной кодировкой....143

Как определить кодировку последовательности байтов....144

BOM: полезный крокозябр....145

Обработка текстовых файлов....146

Остерегайтесь кодировок по умолчанию....149

Нормализация Unicode для надежного сравнения....154

Сворачивание регистра....157

Служебные функции для сравнения нормализованного текста....157

Экстремальная «нормализация»: удаление диакритических знаков....158

Сортировка Unicode-текстов....161

Сортировка с помощью алгоритма упорядочивания Unicode....163

База данных Unicode....164

Поиск символов по имени....164

Символы, связанные с числами....166

Двухрежимный API....167

str и bytes в регулярных выражениях....167

str и bytes в функциях из модуля os....169

Резюме....169

Дополнительная литература....170

Глава 5....175

Построители классов данных....175

Что нового в этой главе....176

Обзор построителей классов данных....176

Основные возможности....178

Классические именованные кортежи....180

Типизированные именованные кортежи....183

Краткое введение в аннотации типов....184

Никаких последствий во время выполнения....184

Синтаксис аннотаций переменных....185

Семантика аннотаций переменных....185

Инспекция typing.NamedTuple....186

Инспектирование класса с декоратором dataclass....187

Еще о @dataclass....189

Опции полей....190

Постинициализация....193

Типизированные атрибуты класса....195

Инициализируемые переменные, не являющиеся полями....195

Пример использования @dataclass: запись о ресурсе из дублинского ядра....196

Класс данных как признак кода с душком....198

Класс данных как временная конструкция....200

Класс данных как промежуточное представление....200

Сопоставление с экземплярами классов – образцами....200

Простые классы-образцы....201

Именованные классы-образцы....201

Позиционные классы-образцы....203

Резюме....204

Дополнительная литература....204

Глава 6....208

Ссылки на объекты, изменяемость и повторное использование....208

Что нового в этой главе....209

Переменные – не ящики....209

Тождественность, равенство и псевдонимы....211

Выбор между == и is....212

Относительная неизменяемость кортежей....213

По умолчанию копирование поверхностное....214

Глубокое и поверхностное копирование произвольных объектов....217

Параметры функций как ссылки....218

Значения по умолчанию изменяемого типа: неудачная мысль....219

Защитное программирование при наличии изменяемых параметров....221

del и сборка мусора....223

Как Python хитрит с неизменяемыми объектами....225

Резюме....227

Дополнительная литература....228

Часть II....232

Функции как объекты....232

Глава 7....233

Функции как полноправные объекты....233

Что нового в этой главе....234

Обращение с функцией как с объектом....234

Функции высшего порядка....235

Современные альтернативы функциям map, filter и reduce....236

Анонимные функции....238

Девять видов вызываемых объектов....239

Пользовательские вызываемые типы....240

От позиционных к чисто именованным параметрам....241

Чисто позиционные параметры....243

Пакеты для функционального программирования....244

Модуль operator....244

Фиксация аргументов с помощью functools.partial....247

Резюме....249

Дополнительная литература....249

Глава 8....253

Аннотации типов в функциях....253

Что нового в этой главе....254

О постепенной типизации....254

Постепенная типизация на практике....255

Начинаем работать с Mypy....256

А теперь построже....257

Значение параметра по умолчанию....257

None в качестве значения по умолчанию....259

Типы определяются тем, какие операции они поддерживают....260

Типы, пригодные для использования в аннотациях....265

Тип Any....265

«Является подтипом» и «совместим с»....266

Простые типы и классы....268

Типы Optional и Union....268

Обобщенные коллекции....269

Типы кортежей....272

Обобщенные отображения....274

Абстрактные базовые классы....275

Тип Iterable....277

Параметризованные обобщенные типы и TypeVar....279

Статические протоколы....283

Тип Callable....287

Тип NoReturn....290

Аннотирование чисто позиционных и вариадических параметров....290

Несовершенная типизация и строгое тестирование....291

Резюме....292

Дополнительная литература....293

Глава 9....299

Декораторы и замыкания....299

Что нового в этой главе....300

Краткое введение в декораторы....300

Когда Python выполняет декораторы....301

Регистрационные декораторы....303

Правила видимости переменных....303

Замыкания....306

Объявление nonlocal....309

Логика поиска переменных....310

Реализация простого декоратора....311

Как это работает....312

Декораторы в стандартной библиотеке....313

Запоминание с помощью functools.cache....314

Использование lru_cache....316

Обобщенные функции с одиночной диспетчеризацией....317

Параметризованные декораторы....321

Параметризованный регистрационный декоратор....322

Параметризованный декоратор clock....323

Декоратор clock на основе класса....326

Резюме....327

Дополнительная литература....327

Глава 10....332

Реализация паттернов проектирования с помощью полноправных функций....332

Что нового в этой главе....333

Практический пример: переработка паттерна Стратегия....333

Классическая Стратегия....333

Функционально-ориентированная стратегия....337

Выбор наилучшей стратегии: простой подход....340

Поиск стратегий в модуле....341

Паттерн Стратегия, дополненный декоратором....342

Паттерн Команда....344

Резюме....345

Дополнительная литература....346

Часть III....350

Классы и протоколы....350

Глава 11....351

Объект в духе Python....351

Что нового в этой главе....352

Представления объекта....352

И снова класс вектора....353

Альтернативный конструктор....355

Декораторы classmethod и staticmethod....356

Форматирование при выводе....357

Хешируемый класс Vector2d....360

Поддержка позиционного сопоставления с образцом....362

Полный код класса Vector2d, версия 3....364

Закрытые и «защищенные» атрибуты в Python....367

Экономия памяти с помощью атрибута класса __slots__....369

Простое измерение экономии, достигаемой за счет __slot__....371

Проблемы при использовании __slots__....372

Переопределение атрибутов класса....373

Резюме....375

Дополнительная литература....376

Глава 12....380

Специальные методы для последовательностей....380

Что нового в этой главе....380

Vector: пользовательский тип последовательности....381

Vector, попытка № 1: совместимость с Vector2d....381

Протоколы и утиная типизация....384

Vector, попытка № 2: последовательность, допускающая срез....385

Как работает срезка....386

Метод __getitem__ с учетом срезов....387

Vector, попытка № 3: доступ к динамическим атрибутам....389

Vector, попытка № 4: хеширование и ускорение оператора ==....392

Vector, попытка № 5: форматирование....398

Резюме....405

Дополнительная литература....406

Глава 13....410

Интерфейсы, протоколы и ABC....410

Карта типизации....411

Что нового в этой главе....412

Два вида протоколов....412

Программирование уток....414

Python в поисках следов последовательностей....414

Партизанское латание как средство реализации протокола во время выполнения....416

Защитное программирование и принцип быстрого отказа....418

Гусиная типизация....420

Создание подкласса ABC....425

ABC в стандартной библиотеке....426

Определение и использование ABC....429

Синтаксические детали ABC....434

Создание подклассов ABC....434

Виртуальный подкласс Tombola....437

Использование функции register на практике....439

ABC и структурная типизация....439

Статические протоколы....441

Типизированная функция double....442

Статические протоколы, допускающие проверку во время выполнения....443

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

Поддержка статического протокола....447

Проектирование статического протокола....449

Рекомендации по проектированию протоколов....450

Расширение протокола....451

ABC из пакета numbers и числовые протоколы....452

Резюме....455

Дополнительная литература....456

Глава 14....461

Наследование: к добру или к худу....461

Что нового в этой главе....462

Функция super()....462

Сложности наследования встроенным типам....464

Множественное наследование и порядок разрешения методов....467

Классы-примеси....472

Отображения, не зависящие от регистра....472

Множественное наследование в реальном мире....474

ABC – тоже примеси....474

ThreadingMixIn и ForkingMixIn....474

Множественное наследование в Tkinter....479

Жизнь с множественным наследованием....481

Предпочитайте композицию наследованию класса....482

Разберитесь, зачем наследование используется в каждом конкретном случае....482

Определяйте интерфейсы явно с помощью ABC....482

Используйте примеси для повторного использования кода....483

Предоставляйте пользователям агрегатные классы....483

Наследуйте только классам, предназначенным для наследования....483

Воздерживайтесь от наследования конкретным классам....484

Tkinter: хороший, плохой, злой....484

Резюме....486

Дополнительная литература....487

Глава 15....491

Еще об аннотациях типов....491

Что нового в этой главе....491

Перегруженные сигнатуры....491

Перегрузка max....493

Уроки перегрузки max....497

TypedDict....497

Приведение типов....504

Чтение аннотаций типов во время выполнения....507

Проблемы с аннотациями во время выполнения....507

Как решать проблему....510

Реализация обобщенного класса....510

Основы терминологии, относящейся к обобщенным типам....512

Вариантность....513

Инвариантный разливочный автомат....513

Ковариантный разливочный автомат....515

Контравариантная урна....515

Обзор вариантности....517

Реализация обобщенного статического протокола....519

Резюме....521

Дополнительная литература....522

Глава 16....527

Перегрузка операторов....527

Что нового в этой главе....528

Основы перегрузки операторов....528

Унарные операторы....529

Перегрузка оператора сложения векторов +....532

Перегрузка оператора умножения на скаляр *....537

Использование @ как инфиксного оператора....539

Арифметические операторы – итоги....540

Операторы сравнения....541

Операторы составного присваивания....544

Резюме....548

Дополнительная литература....549

Часть IV....554

Поток управления....554

Глава 17....555

Итераторы, генераторы и классические сопрограммы....555

Что нового в этой главе....556

Последовательность слов....556

Почему последовательности итерируемы: функция iter....557

Использование iter в сочетании с Callable....559

Итерируемые объекты и итераторы....560

Классы Sentence с методом __iter__....563

Класс Sentence, попытка № 2: классический итератор....564

Не делайте итерируемый объект итератором для самого себя....565

Класс Sentence, попытка № 3: генераторная функция....566

Как работает генератор....567

Ленивые классы Sentence....569

Класс Sentence, попытка № 4: ленивый генератор....569

Класс Sentence, попытка № 5: генераторное выражение....570

Генераторные выражения: когда использовать....572

Генератор арифметической прогрессии....574

Построение арифметической прогрессии с помощью itertools....576

Генераторные функции в стандартной библиотеке....577

Функции редуцирования итерируемого объекта....587

yield from и субгенераторы....589

Изобретаем chain заново....590

Обход дерева....591

Обобщенные итерируемые типы....595

Классические сопрограммы....596

Пример: сопрограмма для вычисления накопительного среднего....598

Возврат значения из сопрограммы....600

Аннотации обобщенных типов для классических сопрограмм....604

Резюме....606

Дополнительная литература....606

Глава 18....611

Блоки with, match и else....611

Что нового в этой главе....612

Контекстные менеджеры и блоки with....612

Утилиты contextlib....616

Использование @contextmanager....617

Сопоставление с образцом в lis.py: развернутый пример....621

Синтаксис Scheme....621

Предложения импорта и типы....622

Синтаксический анализатор....623

Класс Environment....625

Цикл REPL....627

Вычислитель....628

Procedure: класс, реализующий замыкание....635

Использование OR-образцов....636

Делай то, потом это: блоки else вне if....637

Резюме....639

Дополнительная литература....640

Глава 19....645

Модели конкурентности в Python....645

Что нового в этой главе....646

Общая картина....646

Немного терминологии....647

Процессы, потоки и знаменитая блокировка GIL в Python ....649

Конкурентная программа Hello World....651

Анимированный индикатор с потоками....651

Индикатор с процессами....654

Индикатор с сопрограммами....655

Сравнение супервизоров....659

Истинное влияние GIL....661

Проверка знаний....661

Доморощенный пул процессов....664

Решение на основе процессов....665

Интерпретация времени работы....666

Код проверки на простоту для многоядерной машины....667

Эксперименты с большим и меньшим числом процессов....670

Не решение на основе потоков....671

Python в многоядерном мире....672

Системное администрирование....673

Наука о данных....674

Веб-разработка на стороне сервера и на мобильных устройствах....675

WSGI-серверы приложений....677

Распределенные очереди задач....679

Резюме....680

Дополнительная литература....681

Конкурентность с применением потоков и процессов....681

GIL....683

Конкурентность за пределами стандартной библиотеки....683

Конкурентность и масштабируемость за пределами Python....685

Глава 20....690

Конкурентные исполнители....690

Что нового в этой главе....690

Конкурентная загрузка из веба....691

Скрипт последовательной загрузки....693

Загрузка с применением библиотеки concurrent.futures....695

Где находятся будущие объекты?....697

Запуск процессов с помощью concurrent.futures....700

И снова о проверке на простоту на многоядерной машине....700

Эксперименты с Executor.map....703

Загрузка с индикацией хода выполнения и обработкой ошибок....706

Обработка ошибок во flags2-примерах....710

Использование futures.as_completed....712

Резюме....715

Дополнительная литература....715

Глава 21....718

Асинхронное программирование....718

Что нового в этой главе....719

Несколько определений....719

Пример использования asyncio: проверка доменных имен....720

Предложенный Гвидо способ чтения асинхронного кода....722

Новая концепция: объекты, допускающие ожидание....723

Загрузка файлов с помощью asyncio и HTTPX....724

Секрет платформенных сопрограмм: скромные генераторы....726

Проблема «все или ничего»....727

Асинхронные контекстные менеджеры....728

Улучшение асинхронного загрузчика....729

Использование asyncio.as_completed и потока....730

Регулирование темпа запросов с помощью семафора....732

Отправка нескольких запросов при каждой загрузке....735

Делегирование задач исполнителям....738

Написание асинхронных серверов....739

Веб-служба FastAPI....741

Асинхронный TCP-сервер....745

Асинхронные итераторы и итерируемые объекты....750

Асинхронные генераторные функции....751

Асинхронные включения и асинхронные генераторные выражения....757

async за пределами asyncio: Curio....759

Аннотации типов для асинхронных объектов....762

Как работает и как не работает асинхронность....763

Круги, разбегающиеся вокруг блокирующих вызовов....763

Миф о системах, ограниченных вводом-выводом....764

Как не попасть в ловушку счетных функций....764

Резюме....765

Дополнительная литература....766

Часть V....770

Метапрограммирование....770

Глава 22....771

Динамические атрибуты и свойства....771

Что нового в этой главе....771

Применение динамических атрибутов для обработки данных....772

Исследование JSON-подобных данных с динамическими атрибутами....774

Проблема недопустимого имени атрибута....777

Гибкое создание объектов с помощью метода __new__....778

Вычисляемые свойства....780

Шаг 1: создание управляемого данными атрибута....781

Шаг 2: выборка связанных записей с помощью свойств....783

Шаг 3: переопределение существующего атрибута свойством....786

Шаг 4: кеширование свойств на заказ....787

Шаг 5: кеширование свойств с помощью functools....788

Использование свойств для контроля атрибутов....790

LineItem, попытка № 1: класс строки заказа....790

LineItem, попытка № 2: контролирующее свойство....791

Правильный взгляд на свойства....793

Свойства переопределяют атрибуты экземпляра....794

Документирование свойств....796

Программирование фабрики свойств....797

Удаление атрибутов....799

Важные атрибуты и функции для работы с атрибутами....801

Специальные атрибуты, влияющие на обработку атрибутов....801

Встроенные функции для работы с атрибутами....802

Специальные методы для работы с атрибутами....803

Резюме....804

Дополнительная литература....805

Глава 23....809

Дескрипторы атрибутов....809

Что нового в этой главе....809

Пример дескриптора: проверка значений атрибутов....810

LineItem попытка № 3: простой дескриптор....810

LineItem попытка № 4: автоматическое генерирование имен атрибутов хранения....815

LineItem попытка № 5: новый тип дескриптора....817

Переопределяющие и непереопределяющие дескрипторы....819

Переопределяющие дескрипторы....821

Переопределяющий дескриптор без __get__....822

Непереопределяющий дескриптор....823

Перезаписывание дескриптора в классе....824

Методы являются дескрипторами....825

Советы по использованию дескрипторов....827

Строка документации дескриптора и перехват удаления....828

Резюме....830

Дополнительная литература....830

Глава 24....833

Метапрограммирование классов....833

Что нового в этой главе....834

Классы как объекты....834

type: встроенная фабрика классов....835

Функция-фабрика классов....836

Введение в __init_subclass__....839

Почему __init_subclass__ не может конфигурировать __slots__....845

Дополнение класса с помощью декоратора класса....846

Что когда происходит: этап импорта и этап выполнения....848

Демонстрация работы интерпретатора....849

Основы метаклассов....853

Как метакласс настраивает класс....855

Элегантный пример метакласса....856

Демонстрация работы метакласса....859

Реализация Checked с помощью метакласса....863

Метаклассы на практике....867

Современные средства позволяют упростить или заменить метаклассы....867

Метаклассы – стабильное языковое средство....868

У класса может быть только один метакласс....868

Метаклассы должны быть деталью реализации....869

Метаклассный трюк с __prepare__....869

Заключение....871

Резюме....872

Дополнительная литература....873

Послесловие....877

Предметный указатель....880

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

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

 Новое издание состоит из пяти частей, которые можно рассматривать как пять отдельных книг.



Похожее:

Список отзывов:

Нет отзывов к книге.