Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

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

Покупка
Артикул: 712465.01.99
Доступ онлайн
999 ₽
В корзину
Язык Python настолько прост, что научиться продуктивно писать на нем программы можно быстро, но зачастую вы при этом используете не все имеющиеся в нем возможности. Данная книга покажет, как создавать эффективный идиоматичный код на Python, задействуя его лучшие - и иногда несправедливо игнорируемые - черты. Автор, Лучано Рамальо, рассказывает о базовых средствах и библиотеках Python и демонстрирует, как сделать код одновременно короче, быстрее и понятнее. Многие опытные программисты стараются подогнать Python под приемы, знакомые им по работе с другими языками. Эта книга покажет, как достичь истинного профессионализма в программировании на Python 3. Издание предназначено для программистов, уже работающих на Python, но также может быть полезно и начинающим пользователям языка.
Рамальо, Л. Python. К вершинам мастерства / Лучано Рамальо ; пер. с англ. А.А. Слинкина. - Москва : ДМК Пресс, 2016. - 768 с. - ISBN 978-5-97060-384-0. - Текст : электронный. - URL: https://znanium.com/catalog/product/1028052 (дата обращения: 22.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Лучано Рамальо

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

Доступ онлайн
999 ₽
В корзину