وبلاگ بلیان

Python. К вершинам мастерства

معرفی کتاب «Python. К вершинам мастерства» نوشتهٔ Рамальо, Л.، منتشرشده توسط نشر ДМК Пресс در سال 2016. این کتاب در فرمت djvu، زبان ru ارائه شده است. «Python. К вершинам мастерства» در دستهٔ بدون دسته‌بندی قرار دارد.

Язык Python настолько прост, что научиться продуктивно писать на нем программы можно быстро, но зачастую вы при этом используете не все имеющиеся в нем возможности. Данная книга покажет, как создавать эффективный идиоматичный код на Python, задействуя его лучшие - и иногда несправедливо игнорируемые - черты. Автор, Лучано Рамальо, рассказывает о базовых средствах и библиотеках Python и демонстрирует, как сделать код одновременно короче, быстрее и понятнее. Многие опытные программисты стараются подогнать Python под приемы, знакомые им по работе с другими языками. Эта книга покажет, как достичь истинного профессионализма в программировании на Python 3. Издание предназначено для программистов, уже работающих на Python, но также может быть полезно и начинающим пользователям языка. Предисловие 17 На кого рассчитана эта книга 18 На кого эта книга не рассчитана 18 Как организована эта книга 18 Практикум 20 Как производился хронометраж 21 Поговорим: мое личное мнение 21 Терминология Python 22 Использованная версия Python 22 Графические выделения 22 О примерах кода 23 Как с нами связаться 23 Благодарности 24 ЧАСТЬ I. Пролог 27 Глава 1. Модель данных в языке Python 28 Колода карт на Python 29 Как используются специальные методы 33 Эмуляция числовых типов 33 Строковое представление 35 Арифметические операторы 36 Булево значение пользовательского типа 37 Сводка специальных методов 37 Почему len - не метод 39 Резюме 40 Дополнительная литература 40 ЧАСТЬ II. Структуры данных 43 Глава 2. Массив последовательностей 44 Общие сведения о встроенных последовательностях 45 Списковое включение и генераторные выражения 46 Списковое включение и удобочитаемость 46 Сравнение спискового включения с mар и filter 48 Декартовы произведения 49 Генераторные выражения 50 Кортеж- не просто неизменяемый список 52 Кортежи как записи 52 Распаковка кортежа 53 Использование * для выборки лишних элементов 54 Распаковка вложенного кортежа 55 Именованные кортежи 56 Кортежи как неизменяемые списки 57 Получение среза 59 Почему в срезы и диапазоны не включается последний элемент 59 Объекты среза 59 Многомерные срезы и многоточие 61 Присваивание срезу 61 Использование + и * для последовательностей 62 Построение списка списков 63 Составное присваивание последовательностей 64 Головоломка: присваивание А += 66 Метод list.sort и встроенная функция sorted 68 Средства работы с упорядоченными последовательностями в модуле bisect 70 Поиск средствами bisect 70 Вставка с помощью функции bisect.insort 73 Когда список не подходит 74 Массивы 74 Представления областей памяти 78 Библиотеки NumPy и SciPy 79 Двусторонние и другие очереди 81 Резюме 85 Дополнительная литература 86 Глава 3. Словари и множества 91 Общие типы отображений V. 91 Словарное включение 94 Обзор наиболее употребительных методов отображений 94 Обработка отсутствия ключей с помощью setdefault 97 Отображения с гибким поиском по ключу 99 defaultdict: еще один подход к обработке отсутствия ключа 99 Метод_missing. 101 Вариации на тему diet 103 Создание подкласса UserDict 105 Неизменяемые отображения 106 Теория множеств 108 Литеральные множества 109 Множественное включение 111 Операции над множествами 111 Под капотом diet и set 114 Экспериментальная демонстрация производительности 115 Хэш-таблицы в словарях 117 Практические последствия механизма работы diet 120 Как работают множества - практические следствия 123 Резюме 123 Дополнительная литература 124 Поговорим 124 Глава 4. Текст и байты 126 О символах и не только 127 Все, что нужно знать о байтах 128 Структуры и представления областей памяти 131 Базовые кодировщики и декодировщики 132 Проблемы кодирования и декодирования 134 Обработка UnicodeEncodeError 134 Обработка UnicodeDecodeError 135 Исключение SyntaxError при загрузке модулей и неожиданной кодировкой 136 Как определить кодировку последовательности байтов 138 ВОМ: полезный крокозябр 139 Обработка текстовых файлов 140 Кодировки по умолчанию: сумасшедший дом 143 Нормализация Unicode для правильного сравнения 146 Сворачивание регистра 149 Служебные функции для сравнения нормализованного текста 150 Экстремальная «нормализация»: удаление диакритических знаков 151 Сортировка Unicode-текстов 154 Сортировка с помощью алгоритма упорядочивания Unicode 156 База данных Unicode У. 157 Двухрежимный API 159 str и bytes в регулярных выражениях 159 str и bytes в функциях из модуля os 160 Резюме 162 Дополнительная литература 164 Поговорим 166 ЧАСТЬ III. Функции как объекты 169 Глава 5. Полноправные функции 170 Обращение с функцией как с объектом 171 Функции высшего порядка 172 Современные альтернативы функциям map, filter и reduce 173 Анонимные функции 175 Семь видов вызываемых объектов 176 Пользовательские вызываемые типы 177 Интроспекция функций 178 От позиционных к чисто именованным параметрам 180 Получение информации о параметрах 182 Аннотации функций 186 Пакеты для функционального программирования 188 Модуль operator 188 Фиксация аргументов с помощью functools.partial 191 Резюме 193 Дополнительная литература 194 Поговорим 195 Глава 6. Реализация паттернов проектирования с помощью полноправных функций 198 Практический пример: переработка паттерна Стратегия 199 Классическая Стратегия 199 Функционально-ориентированная стратегия 203 Выбор наилучшей стратегии: простой подход 206 Поиск стратегий в модуле 207 Паттерн Команда 208 Резюме 210 Дополнительная литература 211 Поговорим 212 Глава 7. Декораторы функций и замыкания 214 Краткое введение в декораторы 215 Когда Python выполняет декораторы 216 Паттерн Стратегия, дополненный декоратором 218 Правила видимости переменных 219 Замыкания 222 Объявление nonlocal 225 Реализация простого декоратора 227 Как это работает 228 Декораторы в стандартной библиотеке 230 Кэширование с помощью functools.Iru_cache 230 Одиночная диспетчеризация и обобщенные функции 233 Композиции декораторов 236 Параметризованные декораторы 236 Параметризованный регистрационный декоратор 237 Параметризованный декоратор clock 239 Резюме 242 Дополнительная литература 242 Поговорим 243 ЧАСТЬ IV. Объектно-ориентированные идиомы 247 Глава 8. Ссылки на объекты, изменяемость и повторное использование 248 Переменные - не ящики 249 Тождественность, равенство и синонимы 250 Выбор между == и is 252 Относительная неизменяемость кортежей 253 По умолчанию копирование поверхностное 254 Глубокое и поверхностное копирование произвольных объектов 256 Параметры функций как ссылки 258 Значения по умолчанию изменяемого типа: неудачная мысль 259 Защитное программирование при наличии изменяемых параметров 261 del и сборка мусора 263 Слабые ссылки 265 Коллекция WeakValueDictionary 266 Ограничения слабых ссылок 268 Как Python хитрит с неизменяемыми объектами 269 Резюме 270 Дополнительная литература 271 Поговорим 272 Глава 9. Объект в духе Python 276 Представления объекта 277 И снова класс вектора 277 Альтернативный конструктор 280 Декораторы classmethod и staticmethod 281 Форматирование при выводе 282 Хэшируемый класс Vector2d 286 Закрытые и «защищенные» атрибуты в Python 291 Экономия памяти с помощью атрибута класса _slots 293 Проблемы при использовании _slots. 296 Переопределение атрибутов класса 296 Резюме 299 Дополнительная литература 300 Поговорим 301 Глава 10. Рубим, перемешиваем и нарезаем последовательности 305 Vector: пользовательский тип последовательности 306 Vector, попытка № 1: совместимость с Vector2d 306 Протоколы и динамическая типизация 309 Vector, попытка № 2: последовательность, допускающая срезку 310 Как работает срезка 311 Метод_getitem_ с учетом срезов 313 Vector, попытка № 3: доступ к динамическим атрибутам 315 Vector, попытка № 4: хэширование и ускорение оператора == 319 Vector, попытка № 5: форматирование 324 Резюме 331 Дополнительная литература 332 Поговорим 333 Глава 11. Интерфейсы: от протоколов до абстрактных базовых классов 338 Интерфейсы и протоколы в культуре Python 339 Python в поисках следов последовательностей 341 Партизанское латание как средство реализации протокола во время выполнения 343 Алекс Мартелли о водоплавающих 345 Создание подкласса АВС 350 АВС в стандартной библиотеке 352 АВС в модуле collections.abc 352 Числовая башня АВС 354 Определение и использование АВС 355 Синтаксические детали АВС 359 Создание подклассов ABC Tombola 360 Виртуальный подкласс Tombola 363 Как тестировались подклассы Tombola 365 Использование метода register на практике 368 Гуси могут вести себя как утки 369 Резюме 371 Дополнительная литература 373 Поговорим 374 Глава 12. Наследование: хорошо или плохо 380 Сложности наследования встроенным типам 380 Множественное наследование и порядок разрешения методов 384 Множественное наследование в реальном мире 388 Жизнь с множественным наследованием 391 Tkinter: хороший, плохой, злой 393 Современный пример: примеси в обобщенных представлениях Django 395 Резюме 398 Дополнительная литература 399 Поговорим 400 Глава 13. Перегрузка операторов: как правильно? 403 Основы перегрузки операторов 404 Унарные операторы 404 Перегрузка оператора сложения векторов + 407 Перегрузка оператора умножения на скаляр * 412 Операторы сравнения 416 Операторы составного присваивания 420 Резюме 425 Дополнительная литература 426 Поговорим 427 ЧАСТЬ V. Поток управления 431 Глава 14. Итерируемые объекты, итераторы и генераторы 432 Класс Sentence, попытка № 1: последовательность слов 433 Почему последовательности итерируемы: функция iter 435 Итерируемые объекты и итераторы 436 Класс Sentence, попытка № 2: классический вариант 440 Почему идея сделать Sentence итератором плоха 442 Класс Sentence, попытка № 3: генераторная функция 443 Как работает генераторная функция 444 Класс Sentence, попытка № 4: ленивая реализация 447 Класс Sentence, попытка № 5: генераторное выражение 448 Генераторные выражения: когда использовать 450 Другой пример: генератор арифметической прогрессии 451 Построение арифметической прогрессии с помощью itertools 453 Генераторные функции в стандартной библиотеке 454 yield from- новая конструкция в Python 3.3 465 Функции редуцирования итерируемого объекта 466 Более пристальный взгляд на функцию iter 468 Пример: генераторы в утилите преобразования базы данных 469 Генераторы как сопрограммы 471 Резюме 472 Дополнительная литература 472 Поговорим 473 Глава 15. Контекстные менеджеры и блоки else 479 Делай то, потом это: блоки else вне if 480 Контекстные менеджеры и блоки with 482 Утилиты contextlib 486 Использование @contextmanager 487 Резюме 490 Дополнительная литература 491 Поговорим 492 Глава 16. Сопрограммы 494 Эволюция: от генераторов к сопрограммам 495 Базовое поведение генератора, используемого в качестве сопрограммы 496 Пример: сопрограмма для вычисления накопительного среднего 499 Декораторы для инициализации сопрограмм 501 Завершение сопрограммы и обработка исключений 502 Возврат значения из сопрограммы 506 Использование yield from 508 Семантика yield from 514 Пример: применение сопрограмм для моделирования дискретных событий 520 О моделировании дискретных событий 521 Моделирование работы таксопарка 522 Резюме 529 Дополнительная литература 531 Поговорим 533 Глава 17. Параллелизм и будущие объекты 536 Пример: три способа загрузки из веба 536 Скрипт последовательной загрузки 538 Загрузка с применением библиотеки concurrent.futures 540 Где находятся будущие объекты? 542 Блокирующий ввод-вывод и GIL 545 Запуск процессов с помощью concurrent.futures 546 Эксперименты с Executor.map 548 Загрузка с индикацией хода выполнения и обработкой ошибок 551 Обработка ошибок во flags2-npnMepax 556 Использование futures.as_completed 558 Альтернативы: многопоточная и многопроцессная обработка 561 Резюме 561 Дополнительная литература 562 Поговорим 564 Глава 18. Применение пакета asyncio для организации конкурентной работы 567 Сравнение потока и сопрограммы 569 asyncio.Future: не блокирует умышленно 575 Yield from из будущих объектов, задач и сопрограмм 576 Загрузка с применением asyncio и aiohttp 578 Объезд блокирующих вызовов 582 Улучшение скрипта загрузки на основе asyncio 585 Использование asyncio.as_completed 585 Использование исполнителя для предотвращения блокировки цикла обработки событий 591 От обратных вызовов к будущим объектам и сопрограммам 592 Выполнение нескольких запросов для каждой операции загрузки 595 Разработка серверов с помощью пакета asyncio 597 TCP-ÿÿÿÿÿÿ на основе asyncio 598 Веб-сервер на основе библиотеки aiohttp 602 Повышение степени параллелизма за счет более интеллектуальных клиентов 606 Резюме 607 Дополнительная литература 608 Поговорим 610 ЧАСТЬ VI. Метапрограммирование 613 Глава 19. Динамические атрибуты и свойства 614 Применение динамических атрибутов для обработки данных 615 Исследование JSON-подобных данных с динамическими атрибутами 617 Проблема недопустимого имени атрибута 620 Гибкое создание объектов с помощью метода _new. 622 Изменение структуры набора данных OSCON с помощью модуля shelve 624 Выборка связанных записей с помощью свойств 627 Использование свойств для контроля атрибутов 633 Lineltem, попытка № 1: класс строки заказа 633 Lineltem, попытка № 2: контролирующее свойство 634 Правильный взгляд на свойства 636 Свойства переопределяют атрибуты экземпляра 637 Документирование свойств 639 Программирование фабрики свойств 640 Удаление атрибутов 643 Важные атрибуты и функции для работы с атрибутами 644 Специальные атрибуты, влияющие на обработку атрибутов 645 Встроенные функции для работы с атрибутами 645 Специальные методы для работы с атрибутами 646 Резюме 648 Дополнительная литература 648 Поговорим 649 Глава 20. Дескрипторы атрибутов 653 Пример дескриптора: проверка значений атрибутов 653 Lineltem попытка № 3: простой дескриптор 654 Lineltem попытка № 4: автоматическая генерация имен атрибутов хранения 659 Lineltem попытка № 5: новый тип дескриптора 665 Переопределяющие и непереопределяющие дескрипторы 668 Переопределяющий дескриптор 669 Переопределяющий дескриптор без _get. 670 Непереопределяющий дескриптор 671 Перезаписывание дескриптора в классе 673 Методы являются дескрипторами 673 Советы по использованию дескрипторов 676 Строка документации дескриптора и перехват удаления 677 Резюме 678 Дополнительная литература 679 Поговорим 680 Глава 21. Метапрограммирование классов 682 Фабрика классов 683 Декоратор класса для настройки дескрипторов 686 Что когда происходит: этап импорта и этап выполнения 688 Демонстрация работы интерпретатора 689 Основы метаклассов 693 Демонстрация работы метакласса 695 Метакласс для настройки дескрипторов 699 Специальный метод метакласса _ргераге. 701 Классы как объекты 703 Резюме 704 Дополнительная литература 705 Поговорим 707 Послесловие 709 Дополнительная литература 710 Приложение А. Основы языка Python 713 Глава 3: тест производительности оператора in 713 Глава 3: сравнение битовых представлений хэшей 715 Глава 9. Потребление оперативной памяти при наличии и отсутствии _slots. 716 Глава 14: скрипт преобразования базы данных isis2json.py 717 Глава 16: моделирование дискретных событий таксопарка 722 Глава 17: примеры, относящиеся к криптографии 726 Глава 17: примеры HTTP-клиентов из серии flags2 729 Глава 19: скрипты и тесты для обработки набора данных OSCON 734 Терминология Python 739 Предметный указатель 754 Язык Python настолько прост, что научиться продуктивно писать на нем программы можно быстро, но зачастую вы при этом используете не все имеющиеся в нем возможности. Данная книга покажет, как создавать эффективный идиоматичный код на Python, задействуя его лучшие - и иногда несправедливо игнорируемые - черты. Автор, Лучано Рамальо, рассказывает о базовых средствах и библиотеках Python и демонстрирует, как сделать код одновременно короче, быстрее и понятнее. Многие опытные программисты стараются подогнать Python под приемы, знакомые им по работе с другими языками. Эта книга покажет, как достичь истинного профессионализма в программировании на Python 3. Издание предназначено для программистов, уже работающих на Python, но также может быть полезно и начинающим пользователям языка. Предисловие 17 На кого рассчитана эта книга 18 На кого эта книга не рассчитана 18 Как организована эта книга 18 Практикум 20 Как производился хронометраж 21 Поговорим: мое личное мнение 21 Терминология Python 22 Использованная версия Python 22 Графические выделения 22 О примерах кода 23 Как с нами связаться 23 Благодарности 24 ЧАСТЬ I. Пролог 27 Глава 1. Модель данных в языке Python 28 Колода карт на Python 29 Как используются специальные методы 33 Эмуляция числовых типов 33 Строковое представление 35 Арифметические операторы 36 Булево значение пользовательского типа 37 Сводка специальных методов 37 Почему len - не метод 39 Резюме 40 Дополнительная литература 40 ЧАСТЬ II. Структуры данных 43 Глава 2. Массив последовательностей 44 Общие сведения о встроенных последовательностях 45 Списковое включение и генераторные выражения 46 Списковое включение и удобочитаемость 46 Сравнение спискового включения с mар и filter 48 Декартовы произведения 49 Генераторные выражения 50 Кортеж- не просто неизменяемый список 52 Кортежи как записи 52 Распаковка кортежа 53 Использование * для выборки лишних элементов 54 Распаковка вложенного кортежа 55 Именованные кортежи 56 Кортежи как неизменяемые списки 57 Получение среза 59 Почему в срезы и диапазоны не включается последний элемент 59 Объекты среза 59 Многомерные срезы и многоточие 61 Присваивание срезу 61 Использование + и * для последовательностей 62 Построение списка списков 63 Составное присваивание последовательностей 64 Головоломка: присваивание А += 66 Метод list.sort и встроенная функция sorted 68 Средства работы с упорядоченными последовательностями в модуле bisect 70 Поиск средствами bisect 70 Вставка с помощью функции bisect.insort 73 Когда список не подходит 74 Массивы 74 Представления областей памяти 78 Библиотеки NumPy и SciPy 79 Двусторонние и другие очереди 81 Резюме 85 Дополнительная литература 86 Глава 3. Словари и множества 91 Общие типы отображений V. 91 Словарное включение 94 Обзор наиболее употребительных методов отображений 94 Обработка отсутствия ключей с помощью setdefault 97 Отображения с гибким поиском по ключу 99 defaultdict: еще один подход к обработке отсутствия ключа 99 Метод_missing. 101 Вариации на тему diet 103 Создание подкласса UserDict 105 Неизменяемые отображения 106 Теория множеств 108 Литеральные множества 109 Множественное включение 111 Операции над множествами 111 Под капотом diet и set 114 Экспериментальная демонстрация производительности 115 Хэш-таблицы в словарях 117 Практические последствия механизма работы diet 120 Как работают множества - практические следствия 123 Резюме 123 Дополнительная литература 124 Поговорим 124 Глава 4. Текст и байты 126 О символах и не только 127 Все, что нужно знать о байтах 128 Структуры и представления областей памяти 131 Базовые кодировщики и декодировщики 132 Проблемы кодирования и декодирования 134 Обработка UnicodeEncodeError 134 Обработка UnicodeDecodeError 135 Исключение SyntaxError при загрузке модулей и неожиданной кодировкой 136 Как определить кодировку последовательности байтов 138 ВОМ: полезный крокозябр 139 Обработка текстовых файлов 140 Кодировки по умолчанию: сумасшедший дом 143 Нормализация Unicode для правильного сравнения 146 Сворачивание регистра 149 Служебные функции для сравнения нормализованного текста 150 Экстремальная «нормализация»: удаление диакритических знаков 151 Сортировка Unicode-текстов 154 Сортировка с помощью алгоритма упорядочивания Unicode 156 База данных Unicode У. 157 Двухрежимный API 159 str и bytes в регулярных выражениях 159 str и bytes в функциях из модуля os 160 Резюме 162 Дополнительная литература 164 Поговорим 166 ЧАСТЬ III. Функции как объекты 169 Глава 5. Полноправные функции 170 Обращение с функцией как с объектом 171 Функции высшего порядка 172 Современные альтернативы функциям map, filter и reduce 173 Анонимные функции 175 Семь видов вызываемых объектов 176 Пользовательские вызываемые типы 177 Интроспекция функций 178 От позиционных к чисто именованным параметрам 180 Получение информации о параметрах 182 Аннотации функций 186 Пакеты для функционального программирования 188 Модуль operator 188 Фиксация аргументов с помощью functools.partial 191 Резюме 193 Дополнительная литература 194 Поговорим 195 Глава 6. Реализация паттернов проектирования с помощью полноправных функций 198 Практический пример: переработка паттерна Стратегия 199 Классическая Стратегия 199 Функционально-ориентированная стратегия 203 Выбор наилучшей стратегии: простой подход 206 Поиск стратегий в модуле 207 Паттерн Команда 208 Резюме 210 Дополнительная литература 211 Поговорим 212 Глава 7. Декораторы функций и замыкания 214 Краткое введение в декораторы 215 Когда Python выполняет декораторы 216 Паттерн Стратегия, дополненный декоратором 218 Правила видимости переменных 219 Замыкания 222 Объявление nonlocal 225 Реализация простого декоратора 227 Как это работает 228 Декораторы в стандартной библиотеке 230 Кэширование с помощью functools.Iru_cache 230 Одиночная диспетчеризация и обобщенные функции 233 Композиции декораторов 236 Параметризованные декораторы 236 Параметризованный регистрационный декоратор 237 Параметризованный декоратор clock 239 Резюме 242 Дополнительная литература 242 Поговорим 243 ЧАСТЬ IV. Объектно-ориентированные идиомы 247 Глава 8. Ссылки на объекты, изменяемость и повторное использование 248 Переменные - не ящики 249 Тождественность, равенство и синонимы 250 Выбор между == и is 252 Относительная неизменяемость кортежей 253 По умолчанию копирование поверхностное 254 Глубокое и поверхностное копирование произвольных объектов 256 Параметры функций как ссылки 258 Значения по умолчанию изменяемого типа: неудачная мысль 259 Защитное программирование при наличии изменяемых параметров 261 del и сборка мусора 263 Слабые ссылки 265 Коллекция WeakValueDictionary 266 Ограничения слабых ссылок 268 Как Python хитрит с неизменяемыми объектами 269 Резюме 270 Дополнительная литература 271 Поговорим 272 Глава 9. Объект в духе Python 276 Представления объекта 277 И снова класс вектора 277 Альтернативный конструктор 280 Декораторы classmethod и staticmethod 281 Форматирование при выводе 282 Хэшируемый класс Vector2d 286 Закрытые и «защищенные» атрибуты в Python 291 Экономия памяти с помощью атрибута класса _slots 293 Проблемы при использовании _slots. 296 Переопределение атрибутов класса 296 Резюме 299 Дополнительная литература 300 Поговорим 301 Глава 10. Рубим, перемешиваем и нарезаем последовательности 305 Vector: пользовательский тип последовательности 306 Vector, попытка No 1: совместимость с Vector2d 306 Протоколы и динамическая типизация 309 Vector, попытка No 2: последовательность, допускающая срезку 310 Как работает срезка 311 Метод_getitem_ с учетом срезов 313 Vector, попытка No 3: доступ к динамическим атрибутам 315 Vector, попытка No 4: хэширование и ускорение оператора == 319 Vector, попытка No 5: форматирование 324 Резюме 331 Дополнительная литература 332 Поговорим 333 Глава 11. Интерфейсы: от протоколов до абстрактных базовых классов 338 Интерфейсы и протоколы в культуре Python 339 Python в поисках следов последовательностей 341 Партизанское латание как средство реализации протокола во время выполнения 343 Алекс Мартелли о водоплавающих 345 Создание подкласса АВС 350 АВС в стандартной библиотеке 352 АВС в модуле collections.abc 352 Числовая башня АВС 354 Определение и использование АВС 355 Синтаксические детали АВС 359 Создание подклассов ABC Tombola 360 Виртуальный подкласс Tombola 363 Как тестировались подклассы Tombola 365 Использование метода register на практике 368 Гуси могут вести себя как утки 369 Резюме 371 Дополнительная литература 373 Поговорим 374 Глава 12. Наследование: хорошо или плохо 380 Сложности наследования встроенным типам 380 Множественное наследование и порядок разрешения методов 384 Множественное наследование в реальном мире 388 Жизнь с множественным наследованием 391 Tkinter: хороший, плохой, злой 393 Современный пример: примеси в обобщенных представлениях Django 395 Резюме 398 Дополнительная литература 399 Поговорим 400 Глава 13. Перегрузка операторов: как правильно? 403 Основы перегрузки операторов 404 Унарные операторы 404 Перегрузка оператора сложения векторов + 407 Перегрузка оператора умножения на скаляр * 412 Операторы сравнения 416 Операторы составного присваивания 420 Резюме 425 Дополнительная литература 426 Поговорим 427 ЧАСТЬ V. Поток управления 431 Глава 14. Итерируемые объекты, итераторы и генераторы 432 Класс Sentence, попытка No 1: последовательность слов 433 Почему последовательности итерируемы: функция iter 435 Итерируемые объекты и итераторы 436 Класс Sentence, попытка No 2: классический вариант 440 Почему идея сделать Sentence итератором плоха 442 Класс Sentence, попытка No 3: генераторная функция 443 Как работает генераторная функция 444 Класс Sentence, попытка No 4: ленивая реализация 447 Класс Sentence, попытка No 5: генераторное выражение 448 Генераторные выражения: когда использовать 450 Другой пример: генератор арифметической прогрессии 451 Построение арифметической прогрессии с помощью itertools 453 Генераторные функции в стандартной библиотеке 454 yield from- новая конструкция в Python 3.3 465 Функции редуцирования итерируемого объекта 466 Более пристальный взгляд на функцию iter 468 Пример: генераторы в утилите преобразования базы данных 469 Генераторы как сопрограммы 471 Резюме 472 Дополнительная литература 472 Поговорим 473 Глава 15. Контекстные менеджеры и блоки else 479 Делай то, потом это: блоки else вне if 480 Контекстные менеджеры и блоки with 482 Утилиты contextlib 486 Использование @contextmanager 487 Резюме 490 Дополнительная литература 491 Поговорим 492 Глава 16. Сопрограммы 494 Эволюция: от генераторов к сопрограммам 495 Базовое поведение генератора, используемого в качестве сопрограммы 496 Пример: сопрограмма для вычисления накопительного среднего 499 Декораторы для инициализации сопрограмм 501 Завершение сопрограммы и обработка исключений 502 Возврат значения из сопрограммы 506 Использование yield from 508 Семантика yield from 514 Пример: применение сопрограмм для моделирования дискретных событий 520 О моделировании дискретных событий 521 Моделирование работы таксопарка 522 Резюме 529 Дополнительная литература 531 Поговорим 533 Глава 17. Параллелизм и будущие объекты 536 Пример: три способа загрузки из веба 536 Скрипт последовательной загрузки 538 Загрузка с применением библиотеки concurrent.futures 540 Где находятся будущие объекты? 542 Блокирующий ввод-вывод и GIL 545 Запуск процессов с помощью concurrent.futures 546 Эксперименты с Executor.map 548 Загрузка с индикацией хода выполнения и обработкой ошибок 551 Обработка ошибок во flags2-npnMepax 556 Использование futures.as_completed 558 Альтернативы: многопоточная и многопроцессная обработка 561 Резюме 561 Дополнительная литература 562 Поговорим 564 Глава 18. Применение пакета asyncio для организации конкурентной работы 567 Сравнение потока и сопрограммы 569 asyncio.Future: не блокирует умышленно 575 Yield from из будущих объектов, задач и сопрограмм 576 Загрузка с применением asyncio и aiohttp 578 Объезд блокирующих вызовов 582 Улучшение скрипта загрузки на основе asyncio 585 Использование asyncio.as_completed 585 Использование исполнителя для предотвращения блокировки цикла обработки событий 591 От обратных вызовов к будущим объектам и сопрограммам 592 Выполнение нескольких запросов для каждой операции загрузки 595 Разработка серверов с помощью пакета asyncio 597 TCP-ÿÿÿÿÿÿ на основе asyncio 598 Веб-сервер на основе библиотеки aiohttp 602 Повышение степени параллелизма за счет более интеллектуальных клиентов 606 Резюме 607 Дополнительная литература 608 Поговорим 610 ЧАСТЬ VI. Метапрограммирование 613 Глава 19. Динамические атрибуты и свойства 614 Применение динамических атрибутов для обработки данных 615 Исследование JSON-подобных данных с динамическими атрибутами 617 Проблема недопустимого имени атрибута 620 Гибкое создание объектов с помощью метода _new. 622 Изменение структуры набора данных OSCON с помощью модуля shelve 624 Выборка связанных записей с помощью свойств 627 Использование свойств для контроля атрибутов 633 Lineltem, попытка No 1: класс строки заказа 633 Lineltem, попытка No 2: контролирующее свойство 634 Правильный взгляд на свойства 636 Свойства переопределяют атрибуты экземпляра 637 Документирование свойств 639 Программирование фабрики свойств 640 Удаление атрибутов 643 Важные атрибуты и функции для работы с атрибутами 644 Специальные атрибуты, влияющие на обработку атрибутов 645 Встроенные функции для работы с атрибутами 645 Специальные методы для работы с атрибутами 646 Резюме 648 Дополнительная литература 648 Поговорим 649 Глава 20. Дескрипторы атрибутов 653 Пример дескриптора: проверка значений атрибутов 653 Lineltem попытка No 3: простой дескриптор 654 Lineltem попытка No 4: автоматическая генерация имен атрибутов хранения 659 Lineltem попытка No 5: новый тип дескриптора 665 Переопределяющие и непереопределяющие дескрипторы 668 Переопределяющий дескриптор 669 Переопределяющий дескриптор без _get. 670 Непереопределяющий дескриптор 671 Перезаписывание дескриптора в классе 673 Методы являются дескрипторами 673 Советы по использованию дескрипторов 676 Строка документации дескриптора и перехват удаления 677 Резюме 678 Дополнительная литература 679 Поговорим 680 Глава 21. Метапрограммирование классов 682 Фабрика классов 683 Декоратор класса для настройки дескрипторов 686 Что когда происходит: этап импорта и этап выполнения 688 Демонстрация работы интерпретатора 689 Основы метаклассов 693 Демонстрация работы метакласса 695 Метакласс для настройки дескрипторов 699 Специальный метод метакласса _ргераге. 701 Классы как объекты 703 Резюме 704 Дополнительная литература 705 Поговорим 707 Послесловие 709 Дополнительная литература 710 Приложение А. Основы языка Python 713 Глава 3: тест производительности оператора in 713 Глава 3: сравнение битовых представлений хэшей 715 Глава 9. Потребление оперативной памяти при наличии и отсутствии _slots. 716 Глава 14: скрипт преобразования базы данных isis2json.py 717 Глава 16: моделирование дискретных событий таксопарка 722 Глава 17: примеры, относящиеся к криптографии 726 Глава 17: примеры HTTP-клиентов из серии flags2 729 Глава 19: скрипты и тесты для обработки набора данных OSCON 734 Терминология Python 739 Предметный указатель 754
دانلود کتاب Python. К вершинам мастерства