Национальный цифровой ресурс Руконт - межотраслевая электронная библиотека (ЭБС) на базе технологии Контекстум (всего произведений: 610022)
Контекстум

Python. К вершинам мастерства (5000,00 руб.)

0   0
Первый авторРамальо Лучано
АвторыСлинкин А. А.
ИздательствоМ.: ДМК Пресс
Страниц769
ID794603
АннотацияЯзык Python настолько прост, что научиться продуктивно писать на нем программы можно быстро, но зачастую вы при этом используете не все имеющиеся в нем возможности. Данная книга покажет, как создавать эффективный идиоматичный код на Python, задействуя его лучшие — и иногда несправедливо игнорируемые — черты. Автор, Лучано Рамальо, рассказывает о базовых средствах и библиотеках Python и демонстрирует, как сделать код одновременно короче, быстрее и понятнее. Многие опытные программисты стараются подогнать Python под приемы, знакомые им по работе с другими языками. Эта книга покажет, как достичь истинного профессионализма в программировании на Python 3.
Кому рекомендованоИздание предназначено для программистов, уже работающих на Python, но также может быть полезно и начинающим пользователям языка.
ISBN978-5-97060-384-0
УДК004.438Python:004.6
ББК32.973.22
Рамальо, Л. Python. К вершинам мастерства = Fluent Python / пер. А.А. Слинкин; Л. Рамальо .— Москва : ДМК Пресс, 2016 .— 769 с. : ил. — Пер. с англ. — ISBN 978-5-97060-384-0 .— URL: https://rucont.ru/efd/794603 (дата обращения: 11.04.2025)

Предпросмотр (выдержки из произведения)

Python._К_вершинам_мастерства.pdf
Стр.5
Стр.7
Стр.8
Стр.9
Стр.10
Стр.11
Стр.12
Стр.13
Стр.14
Стр.15
Стр.16
Стр.17
Python._К_вершинам_мастерства.pdf
УДК 004.438Python:004.6 ББК 32.973.22 Р21 Р21 Лучано Рамальо Python. К вершинам мастерства / Пер. с англ. Слинкин А. А. – М.: ДМК Пресс, 2016. – 768 с.: ил. ISBN 978-5-97060-384-0 Язык Python настолько прост, что научиться продуктивно писать на нем программы можно быстро, но зачастую вы при этом используете не все имеющиеся в нем возможности. Данная книга покажет, как создавать эффективный идиоматичный код на Python, задействуя его лучшие – и иногда несправедливо игнорируемые – черты. Автор, Лучано Рамальо, рассказывает о базовых средствах и библиотеках Python и демонстрирует, как сделать код одновременно короче, быстрее и понятнее. Многие опытные программисты стараются подогнать Python под приемы, знакомые им по работе с другими языками. Эта книга покажет, как достичь истинного профессионализма в программировании на Python 3. Издание предназначено для программистов, уже работающих на Python, но также может быть полезно и начинающим пользователям языка. УДК 004.438Python:004.6 ББК 32.973.22 Original English language edition published by O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. Copyright © 2015 O'Reilly Media, Inc. Russianlanguage edition copyright © 2015 by DMK Press. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1-491-94600-8 (англ.) ISBN 978-5-97060-384-0 (рус.) © Luciano Gama de Sousa Ramalho, 2015. © Оформление, перевод на русский язык, издание, ДМК Пресс, 2016
Стр.5
ОГЛАВЛЕНИЕ Предисловие..................................................................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 Сравнение спискового включения с map и filter ............................................ 48 Декартовы произведения ............................................................................. 49
Стр.7
Оглавление 7 Генераторные выражения ............................................................................. 50 Кортеж – не просто неизменяемый список ........................................... 52 Кортежи как записи ...................................................................................... 52 Распаковка кортежа ..................................................................................... 53 Использование * для выборки лишних элементов ................................. 54 Распаковка вложенного кортежа .................................................................. 55 Именованные кортежи ................................................................................. 56 Кортежи как неизменяемые списки .............................................................. 57 Получение среза ................................................................................... 59 Почему в срезы и диапазоны не включается последний элемент .................. 59 Объекты среза ............................................................................................. 59 Многомерные срезы и многоточие ............................................................... 61 Присваивание срезу .................................................................................... 61 Использование + и * для последовательностей .................................... 62 Построение списка списков ......................................................................... 63 Составное присваивание последовательностей ................................... 64 Головоломка: присваивание A += ................................................................. 66 Метод list.sort и встроенная функция sorted ......................................... 68 Средства работы с упорядоченными последовательностями в модуле bisect ..................................................................................... 70 Поиск средствами bisect .............................................................................. 70 Вставка с помощью функции bisect.insort ..................................................... 73 Когда список не подходит ..................................................................... 74 Массивы ...................................................................................................... 74 Представления областей памяти.................................................................. 78 Библиотеки NumPy и SciPy ........................................................................... 79 Двусторонние и другие очереди ................................................................... 81 Резюме ................................................................................................. 85 Дополнительная литература ................................................................. 86 Глава.3..Словари.и.множества. ..........................................91 Общие типы отображений .................................................................... 91 Словарное включение ........................................................................... 94 Обзор наиболее употребительных методов отображений ..................... 94 Обработка отсутствия ключей с помощью setdefault ..................................... 97 Отображения с гибким поиском по ключу ............................................. 99 defaultdict: еще один подход к обработке отсутствия ключа .......................... 99 Метод __missing__ .......................................................................................101 Вариации на тему dict ......................................................................... 103 Создание подкласса UserDict ............................................................. 105 Неизменяемые отображения .............................................................. 106 Теория множеств ................................................................................ 108 Литеральные множества .............................................................................109 Множественное включение .........................................................................111
Стр.8
8 Оглавление Операции над множествами ........................................................................111 Под капотом dict и set ......................................................................... 114 Экспериментальная демонстрация производительности ............................115 Хэш-таблицы в словарях .............................................................................117 Практические последствия механизма работы dict ..................................................................................................120 Как работают множества – практические следствия ....................................123 Резюме ............................................................................................... 123 Дополнительная литература ............................................................... 124 Поговорим .......................................................................................... 124 Глава.4..Текст.и.байты....................................................126 О символах и не только ....................................................................... 127 Все, что нужно знать о байтах ............................................................. 128 Структуры и представления областей памяти .............................................131 Базовые кодировщики и декодировщики ............................................ 132 Проблемы кодирования и декодирования ........................................... 134 Обработка UnicodeEncodeError ...................................................................134 Обработка UnicodeDecodeError ...................................................................135 Исключение SyntaxError при загрузке модулей и неожиданной кодировкой .................................................................................................136 Как определить кодировку последовательности байтов ..............................138 BOM: полезный крокозябр ..........................................................................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
Стр.9
Оглавление 9 Анонимные функции ........................................................................... 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.lru_cache ..............................................230 Одиночная диспетчеризация и обобщенные функции .................................233 Композиции декораторов ................................................................... 236 Параметризованные декораторы ........................................................ 236 Параметризованный регистрационный декоратор ......................................237 Параметризованный декоратор clock ..........................................................239
Стр.10
10 Оглавление Резюме ............................................................................................... 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
Стр.11
Оглавление 11 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 Создание подкласса ABC .................................................................... 350 ABC в стандартной библиотеке ........................................................... 352 ABC в модуле collections.abc .......................................................................352 Числовая башня ABC ...................................................................................354 Определение и использование ABC .................................................... 355 Синтаксические детали ABC........................................................................359 Создание подклассов ABC Tombola .............................................................360 Виртуальный подкласс Tombola ..................................................................363 Как тестировались подклассы Tombola ............................................... 365 Использование метода register на практике ........................................ 368 Гуси могут вести себя как утки ............................................................ 369 Резюме ............................................................................................... 371 Дополнительная литература ............................................................... 373 Поговорим .......................................................................................... 374 Глава.12..Наследование:.хорошо.или.плохо.......................380 Сложности наследования встроенным типам ..................................... 380 Множественное наследование и порядок разрешения методов ......... 384 Множественное наследование в реальном мире ................................ 388 Жизнь с множественным наследованием ........................................... 391 Tkinter: хороший, плохой, злой ....................................................................393
Стр.12
12 Оглавление Современный пример: примеси в обобщенных представлениях 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
Стр.13
Оглавление 13 Глава.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-примерах ........................................................556 Использование futures.as_completed ...........................................................558 Альтернативы: многопоточная и многопроцессная обработка ............ 561 Резюме ............................................................................................... 561 Дополнительная литература ............................................................... 562 Поговорим .......................................................................................... 564
Стр.14
14 Оглавление Глава.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 LineItem, попытка № 1: класс строки заказа .................................................633 LineItem, попытка № 2: контролирующее свойство ......................................634 Правильный взгляд на свойства .......................................................... 636 Свойства переопределяют атрибуты экземпляра ........................................637 Документирование свойств .........................................................................639 Программирование фабрики свойств ................................................. 640 Удаление атрибутов ............................................................................ 643 Важные атрибуты и функции для работы с атрибутами ....................... 644 Специальные атрибуты, влияющие на обработку атрибутов ........................645 Встроенные функции для работы с атрибутами ...........................................645 Специальные методы для работы с атрибутами ..........................................646 Резюме ............................................................................................... 648
Стр.15
Оглавление 15 Дополнительная литература ............................................................... 648 Поговорим .......................................................................................... 649 Глава.20..Дескрипторы.атрибутов....................................653 Пример дескриптора: проверка значений атрибутов .......................... 653 LineItem попытка № 3: простой дескриптор .................................................654 LineItem попытка № 4: автоматическая генерация имен атрибутов хранения .....................................................................................................659 LineItem попытка № 5: новый тип дескриптора ............................................665 Переопределяющие и непереопределяющие дескрипторы ................ 668 Переопределяющий дескриптор .................................................................669 Переопределяющий дескриптор без __get__ ...............................................670 Непереопределяющий дескриптор .............................................................671 Перезаписывание дескриптора в классе .....................................................673 Методы являются дескрипторами ...................................................... 673 Советы по использованию дескрипторов ............................................ 676 Строка документации дескриптора и перехват удаления .................... 677 Резюме ............................................................................................... 678 Дополнительная литература ............................................................... 679 Поговорим .......................................................................................... 680 Глава.21..Метапрограммирование.классов........................682 Фабрика классов ................................................................................ 683 Декоратор класса для настройки дескрипторов .................................. 686 Что когда происходит: этап импорта и этап выполнения ..................... 688 Демонстрация работы интерпретатора .......................................................689 Основы метаклассов........................................................................... 693 Демонстрация работы метакласса ..............................................................695 Метакласс для настройки дескрипторов ............................................. 699 Специальный метод метакласса __prepare__ ......................................................................................... 701 Классы как объекты ............................................................................ 703 Резюме ............................................................................................... 704 Дополнительная литература ............................................................... 705 Поговорим .......................................................................................... 707 Послесловие................................................................709 Дополнительная литература ............................................................... 710 Приложение.А. Основы.языка.Python................................713 Глава 3: тест производительности оператора in .................................. 713 Глава 3: сравнение битовых представлений хэшей ............................. 715 Глава 9. Потребление оперативной памяти при наличии и отсутствии __slots__ ......................................................................... 716
Стр.16
16 Оглавление Глава 14: скрипт преобразования базы данных isis2json.py ................. 717 Глава 16: моделирование дискретных событий таксопарка ................. 722 Глава 17: примеры, относящиеся к криптографии ............................... 726 Глава 17: примеры HTTP-клиентов из серии flags2 .............................. 729 Глава 19: скрипты и тесты для обработки набора данных OSCON ........ 734 Терминология.Python.....................................................739 Предметный.указатель...................................................754
Стр.17

Облако ключевых слов *


* - вычисляется автоматически