Python. К вершинам мастерства
Покупка
Издательство:
ДМК Пресс
Автор:
Рамальо Лусиану
Перевод:
Слинкин Алексей Александрович
Год издания: 2016
Кол-во страниц: 768
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-384-0
Артикул: 712465.01.99
Язык Python настолько прост, что научиться продуктивно писать на нем программы можно быстро, но зачастую вы при этом используете не все имеющиеся в нем возможности. Данная книга покажет, как создавать эффективный идиоматичный код на Python, задействуя его лучшие - и иногда несправедливо игнорируемые - черты. Автор, Лучано Рамальо, рассказывает о базовых средствах и библиотеках Python и демонстрирует, как сделать код одновременно короче, быстрее и понятнее. Многие опытные программисты стараются подогнать Python под приемы, знакомые им по работе с другими языками. Эта книга покажет, как достичь истинного профессионализма в программировании на Python 3.
Издание предназначено для программистов, уже работающих на Python, но также может быть полезно и начинающим пользователям языка.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Лучано Рамальо Python. К вершинам мастерства
Fluent Python Luciano Ramalho Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo
Москва, 2016 Python. К вершинам мастерства Лучано Рамальо
УДК 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 (англ.) © Luciano Gama de Sousa Ramalho, 2015. ISBN 978-5-97060-384-0 (рус.) © Оформление, перевод на русский язык, издание, ДМК Пресс, 2016
Para Marta, com todo o meu amor.
ОГЛАВЛЕНИЕ Предисловие..................................................................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
Оглавление Генераторные выражения ............................................................................. 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
Оглавление Операции над множествами ........................................................................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
Оглавление Анонимные функции ........................................................................... 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
Оглавление Резюме ............................................................................................... 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