Python - к вершинам мастерства: Лаконичное и эффективное программирование
Покупка
Тематика:
Программирование и алгоритмизация
Издательство:
ДМК Пресс
Автор:
Рамальо Лусиану
Перевод:
Слинкин Алексей Александрович
Год издания: 2022
Кол-во страниц: 898
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-97060-885-2
Артикул: 817277.01.99
Не тратьте зря времени, пытаясь подогнать Python под способы программирования, знакомые вам по другим языкам. Python настолько прост, что вы очень быстро станете продуктивным программистом, но зачастую это означает, что вы не в полной мере используете то, что может предложить язык. Второе издание книги позволит вам писать более эффективный и современный код на Python 3, обратив себе на пользу лучшие идеи.
Издание предназначено практикующим программистам на Python, которыехотят усовершенствоваться в Python 3.
- Полная коллекция по информатике и вычислительной технике
- Аналитика данных
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для обучающихся
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для обучающихся (сводная)
- Программирование и алгоритмизация
- Программирование на Python
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Лусиану Рамальо Python – к вершинам мастерства Лаконичное и эффективное программирование
Fluent Python Clear, Concise, and Effective Programming Luciano Ramalho Second edition
Python – к вершинам мастерства Лаконичное и эффективное программирование Лусиану Рамальо Москва, 2022 Второе издание
УДК 004.438Python:004.6 ББК 32.973.22 Р21 Лусиану Рамальо Р21 Python – к вершинам мастерства: Лаконичное и эффективное программирование / пер. с англ. А. А. Слинкина. 2-е изд. – М.: МК Пресс, 2022. – 898 с.: ил. ISBN 978-5-97060-885-2 Не тратьте зря времени, пытаясь подогнать Python под способы программирования, знакомые вам по другим языкам. Python настолько прост, что вы очень быстро станете продуктивным программистом, но зачастую это означает, что вы не в полной мере используете то, что может предложить язык. Второе издание книги позволит вам писать более эффективный и современный код на Python 3, обратив себе на пользу лучшие идеи. Издание предназначено практикующим программистам на Python, которые хотят усовершенствоваться в Python 3. УДК 004.438Python:004.6 ББК 32.973.22 Authorized Russian translation of the English edition of Fluent Python, 2nd Edition ISBN 9781492056355 © 2021 Luciano Gama de Sousa Ramalho. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Copyright © 2021 Luciano Ramalho © Оформление, издание, перевод, ДМК Пресс, 2022 ISBN (анг.) 978-1-49205-635-5 ISBN (рус.) 978-5-97060-885-2
Марте, с любовью
Оглавление Предисловие от издательства ........................................................ 19 Отзывы и пожелания ........................................................................................19 Список опечаток ...............................................................................................19 Нарушение авторских прав .............................................................................19 Об авторе ........................................................................................... 20 Колофон ............................................................................................. 20 Предисловие ...................................................................................... 21 На кого рассчитана эта книга ..........................................................................21 На кого эта книга не рассчитана .....................................................................22 Пять книг в одной .............................................................................................22 Как организована эта книга .............................................................................22 Практикум .........................................................................................................24 Поговорим: мое личное мнение ......................................................................25 Сопроводительный сайт: fluentpython.com ....................................................25 Графические выделения ..................................................................................25 О примерах кода ...............................................................................................26 Как с нами связаться ........................................................................................26 Благодарности ..................................................................................................27 Благодарности к первому изданию .................................................................28 ЧАСТЬ I. СТРУКТУРЫ ДАННЫХ ........................................31 Глава 1. Модель данных в языке Python ...................................... 32 Что нового в этой главе ....................................................................................33 Колода карт на Python ......................................................................................33 Как используются специальные методы ........................................................36 Эмуляция числовых типов ...........................................................................37 Строковое представление ............................................................................40 Булево значение пользовательского типа ..................................................41 API коллекций ...............................................................................................41 Сводка специальных методов .........................................................................43 Почему len – не метод ......................................................................................45 Резюме ...............................................................................................................45 Дополнительная литература ............................................................................46
Глава 2. Массив последовательностей .......................................... 48 Что нового в этой главе ....................................................................................49 Общие сведения о встроенных последовательностях ...................................49 Списковое включение и генераторные выражения .......................................51 Списковое включение и удобочитаемость .................................................52 Сравнение спискового включения с map и filter ........................................53 Декартовы произведения ............................................................................54 Генераторные выражения ............................................................................55 Кортеж – не просто неизменяемый список ....................................................57 Кортежи как записи ......................................................................................57 Кортежи как неизменяемые списки ...........................................................58 Сравнение методов кортежа и списка ........................................................60 Распаковка последовательностей и итерируемых объектов .........................61 Распаковка с помощью * в вызовах функций и литеральных последовательностях ....................................................................................63 Распаковка вложенных объектов ................................................................63 Сопоставление с последовательностями-образцами ....................................64 Сопоставление с последовательностями-образцами в интерпретаторе .........................................................................................69 Получение среза ...............................................................................................72 Почему в срезы и диапазоны не включается последний элемент ............73 Объекты среза ...............................................................................................73 Многомерные срезы и многоточие .............................................................74 Присваивание срезу .....................................................................................75 Использование + и * для последовательностей ..............................................76 Построение списка списков .........................................................................76 Составное присваивание последовательностей .............................................78 Головоломка: присваивание A += ...............................................................79 Метод list.sort и встроенная функция sorted ..................................................81 Когда список не подходит ................................................................................83 Массивы ........................................................................................................83 Представления областей памяти .................................................................86 NumPy ............................................................................................................88 Двусторонние и другие очереди ..................................................................90 Резюме ...............................................................................................................93 Дополнительная литература ............................................................................94 Глава 3. Словари и множества ......................................................... 99 Что нового в этой главе ....................................................................................99 Современный синтаксис словарей ................................................................100 Словарные включения ...............................................................................100 Распаковка отображений ...........................................................................101 Объединение отображений оператором | .................................................102 Сопоставление с отображением-образцом ..................................................102 Стандартный API типов отображений ..........................................................105 Что значит «хешируемый»? .......................................................................105 Обзор наиболее употребительных методов отображений ......................106 Оглавление 7
Вставка и обновление изменяемых значений .........................................108 Автоматическая обработка отсутствующих ключей ...................................111 defaultdict: еще один подход к обработке отсутствия ключа ..................111 Метод __missing__ ........................................................................................112 Несогласованное использование __missing__ в стандартной библиотеке .........................................................................114 Вариации на тему dict ....................................................................................115 collections.OrderedDict ................................................................................115 collections.ChainMap ...................................................................................116 collections.Counter ......................................................................................117 shelve.Shelf ..................................................................................................117 Создание подкласса UserDict вместо dict..................................................118 Неизменяемые отображения .........................................................................120 Представления словаря ..................................................................................121 Практические последствия внутреннего устройства класса dict ................122 Теория множеств ............................................................................................123 Литеральные множества ............................................................................125 Множественное включение .......................................................................126 Практические последствия внутреннего устройства класса set .................126 Операции над множествами......................................................................127 Теоретико-множественные операции над представлениями словарей ....129 Резюме .............................................................................................................131 Дополнительная литература ..........................................................................132 Глава 4. Unicode-текст и байты .....................................................135 Что нового в этой главе ..................................................................................136 О символах, и не только .................................................................................136 Все, что нужно знать о байтах .......................................................................137 Базовые кодировщики и декодировщики ....................................................140 Проблемы кодирования и декодирования ...................................................141 Обработка UnicodeEncodeError ..................................................................142 Обработка UnicodeDecodeError ..................................................................143 Исключение SyntaxError при загрузке модулей с неожиданной кодировкой .......................................................................144 Как определить кодировку последовательности байтов .........................145 BOM: полезный крокозябр .........................................................................146 Обработка текстовых файлов ........................................................................147 Остерегайтесь кодировок по умолчанию .................................................150 Нормализация Unicode для надежного сравнения ......................................155 Сворачивание регистра ..............................................................................158 Служебные функции для сравнения нормализованного текста .............158 Экстремальная «нормализация»: удаление диакритических знаков .....159 Сортировка Unicode-текстов ..........................................................................162 Сортировка с помощью алгоритма упорядочивания Unicode ................164 База данных Unicode .......................................................................................165 Поиск символов по имени .........................................................................165 Символы, связанные с числами.................................................................167 8 Оглавление
Двухрежимный API .........................................................................................168 str и bytes в регулярных выражениях ........................................................168 str и bytes в функциях из модуля os ..........................................................170 Резюме .............................................................................................................170 Дополнительная литература ..........................................................................171 Глава 5. Построители классов данных .........................................176 Что нового в этой главе ..................................................................................177 Обзор построителей классов данных ............................................................177 Основные возможности .............................................................................179 Классические именованные кортежи ...........................................................181 Типизированные именованные кортежи .....................................................184 Краткое введение в аннотации типов ...........................................................185 Никаких последствий во время выполнения ...........................................185 Синтаксис аннотаций переменных ..........................................................186 Семантика аннотаций переменных ..........................................................186 Инспекция typing.NamedTuple ..................................................................187 Инспектирование класса с декоратором dataclass ...................................188 Еще о @dataclass ............................................................................................190 Опции полей ...............................................................................................191 Постинициализация ...................................................................................194 Типизированные атрибуты класса ............................................................196 Инициализируемые переменные, не являющиеся полями ....................196 Пример использования @dataclass: запись о ресурсе из дублинского ядра ...................................................................................197 Класс данных как признак кода с душком ....................................................199 Класс данных как временная конструкция ..............................................201 Класс данных как промежуточное представление ..................................201 Сопоставление с экземплярами классов – образцами ................................201 Простые классы-образцы ...........................................................................202 Именованные классы-образцы .................................................................202 Позиционные классы-образцы .................................................................204 Резюме .............................................................................................................205 Дополнительная литература ..........................................................................205 Глава 6. Ссылки на объекты, изменяемость и повторное использование..........................................................209 Что нового в этой главе ..................................................................................210 Переменные – не ящики ................................................................................210 Тождественность, равенство и псевдонимы .................................................212 Выбор между == и is ....................................................................................213 Относительная неизменяемость кортежей ..............................................214 По умолчанию копирование поверхностное ................................................215 Глубокое и поверхностное копирование произвольных объектов .........218 Параметры функций как ссылки ...................................................................219 Значения по умолчанию изменяемого типа: неудачная мысль .............220 Защитное программирование при наличии изменяемых параметров ....222 Оглавление 9
del и сборка мусора .........................................................................................224 Как Python хитрит с неизменяемыми объектами ........................................226 Резюме .............................................................................................................228 Дополнительная литература ..........................................................................229 ЧАСТЬ II. ФУНКЦИИ КАК ОБЪЕКТЫ .............................233 Глава 7. Функции как полноправные объекты ...........................234 Что нового в этой главе ..................................................................................235 Обращение с функцией как с объектом ........................................................235 Функции высшего порядка ............................................................................236 Современные альтернативы функциям map, filter и reduce ....................237 Анонимные функции .....................................................................................239 Девять видов вызываемых объектов ............................................................240 Пользовательские вызываемые типы ...........................................................241 От позиционных к чисто именованным параметрам .................................242 Чисто позиционные параметры ................................................................244 Пакеты для функционального программирования .....................................245 Модуль operator ..........................................................................................245 Фиксация аргументов с помощью functools.partial .................................248 Резюме .............................................................................................................250 Дополнительная литература ..........................................................................250 Глава 8. Аннотации типов в функциях .........................................254 Что нового в этой главе ..................................................................................255 О постепенной типизации .............................................................................255 Постепенная типизация на практике ...........................................................256 Начинаем работать с Mypy .........................................................................257 А теперь построже ......................................................................................258 Значение параметра по умолчанию .........................................................258 None в качестве значения по умолчанию .................................................260 Типы определяются тем, какие операции они поддерживают ...................261 Типы, пригодные для использования в аннотациях....................................266 Тип Any ........................................................................................................266 «Является подтипом» и «совместим с» .....................................................267 Простые типы и классы ..............................................................................269 Типы Optional и Union ................................................................................269 Обобщенные коллекции ............................................................................270 Типы кортежей ...........................................................................................273 Обобщенные отображения ........................................................................275 Абстрактные базовые классы ....................................................................276 Тип Iterable ..................................................................................................278 Параметризованные обобщенные типы и TypeVar .................................280 Статические протоколы .............................................................................284 Тип Callable .................................................................................................288 Тип NoReturn...............................................................................................291 Аннотирование чисто позиционных и вариадических параметров ..........291 10 Оглавление