6 Содержание
Содержание
Об авторе 21
Об иллюстрации на обложке 21
Предисловие 22
“Экосистема” этой книги 22
О пятом издании 23
Линейки Python 2.X и Python 3.X 25
Современная история Python 2.X/3.X 25
Раскрытие линеек Python 3.X и Python 2.X 26
Какая версия Python должна использоваться? 27
Предпосылки и усилия 28
Структура этой книги 29
Чем эта книга не является 32
Это не справочник и не руководство по специфическим приложениям 32
Это не краткая история для спешащих людей 33
Изложение последовательно до той степени, до которой позволяет Python 33
Программы в книге 34
Версии Python 34
Платформы 35
Загрузка кода примеров для книги 35
Использование кода, сопровождающего книгу 35
Соглашения, используемые в этой книге 36
Ждем ваших отзывов! 36
Благодарности 37
Предыстория 37
Благодарности Python 37
Личные благодарности 38
Часть I. Начало работы 39
Г Л А В А 1. Python в вопросах и ответах 40
Почему люди используют Python? 40
Качество программного обеспечения 42
Продуктивность труда разработчиков 42
Является ли Python “языком написания сценариев”? 43
Хорошо, но в чем недостаток? 44
Кто использует Python в наши дни? 46
Что можно делать с помощью Python? 48
Системное программирование 48
Графические пользовательские интерфейсы 49
Написание сценариев для Интернета 49
Интеграция компонентов 50
Программирование для баз данных 50
Быстрое прототипирование 51
Численное и научное программирование 51
Содержание 7
И еще: игры, изображения, глубинный анализ данных, роботы,
электронные таблицы Excel… 52
Как Python разрабатывается и поддерживается? 53
Компромиссы, связанные с открытым кодом 53
Каковы технические превосходства Python? 54
Он объектно-ориентированный и функциональный 54
Он бесплатный 55
Он переносимый 55
Он мощный 56
Он смешиваемый 57
Он относительно прост в использовании 57
Он относительно прост в изучении 58
Он назван в честь группы “Монти Пайтон” 58
Как Python соотносится с языком X? 59
Резюме 60
Проверьте свои знания: контрольные вопросы 61
Проверьте свои знания: ответы 61
Г Л А В А 2. Как Python выполняет программы 64
Введение в интерпретатор Python 64
Выполнение программ 66
Точка зрения программиста 66
Точка зрения Python 67
Разновидности модели выполнения 70
Альтернативные реализации Python 70
Инструменты оптимизации выполнения 73
Фиксированные двоичные файлы 75
Будущие возможности? 76
Резюме 76
Проверьте свои знания: контрольные вопросы 77
Проверьте свои знания: ответы 77
Г Л А В А 3. Как пользователь выполняет программы 78
Интерактивная подсказка 78
Запуск интерактивного сеанса 79
Пути поиска в системе 81
Новые возможности для Windows в версии Python 3.3:
переменная среды PATH и запускающий модуль 81
Где выполнять: каталоги для кода 82
Что не набирать: приглашения к вводу и комментарии 83
Интерактивное выполнение кода 84
Для чего нужна интерактивная подсказка? 85
Замечания по использованию: интерактивная подсказка 87
Командная строка системы и файлы 89
Первый сценарий 90
Запуск файлов в командной строке 91
Варианты использования командной строки 92
Замечания по использованию: командная строка и файлы 93
8 Содержание
Исполняемые сценарии в стиле Unix: #! 94
Основы сценариев Unix 94
Трюк с поиском посредством env в Unix 95
Запускающий модуль для Windows в версии Python 3.3: #! приходит в Windows 95
Щелчки на значках файлов 97
Основы щелчков на значках 97
Щелчки на значках в Windows 98
Трюк с использованием функции input в Windows 99
Другие ограничения, связанные со щелчками на значках 101
Импортирование и повторная загрузка модулей 101
Основы импортирования и повторной загрузки 101
Дополнительная история о модулях: атрибуты 103
Замечания по использованию: import и reload 106
Использование exec для выполнения файлов модулей 107
Пользовательский интерфейс IDLE 108
Детали запуска IDLE 109
Базовое использование IDLE 110
Удобные функциональные возможности IDLE 111
Расширенные инструменты IDLE 112
Замечания по использованию: IDLE 112
Другие IDE-среды 114
Другие варианты запуска 116
Встраивание вызовов 116
Фиксированные двоичные исполняемые файлы 117
Варианты запуска из текстовых редакторов 117
Прочие варианты запуска 117
Будущие возможности? 118
Какой вариант должен использоваться? 118
Резюме 120
Проверьте свои знания: контрольные вопросы 120
Проверьте свои знания: ответы 121
Проверьте свои знания: упражнения для части I 122
Часть II. Типы и операции 125
Г Л А В А 4. Введение в типы объектов Python 126
Концептуальная иерархия Python 126
Для чего используются встроенные типы? 127
Основные типы данных Python 128
Числа 130
Строки 131
Операции над последовательностями 132
Неизменяемость 134
Методы, специфичные для типа 135
Получение справки 136
Другие способы написания строк 137
Строки Unicode 138
Сопоставление с образцом 141
Содержание 9
Списки 141
Операции над последовательностями 141
Операции, специфичные для типа 142
Контроль границ 142
Вложение 143
Списковые включения 144
Словари 146
Операции над отображениями 146
Снова о вложении 147
Недостающие ключи: проверки if 149
Сортировка ключей: циклы for 150
Итерация и оптимизация 152
Кортежи 153
Для чего используются кортежи? 154
Файлы 154
Файлы с двоичными байтами 155
Файлы с текстом Unicode 156
Другие инструменты, подобные файлам 158
Прочие основные типы 158
Как нарушить гибкость кода 160
Классы, определяемые пользователем 161
Все остальное 162
Резюме 162
Проверьте свои знания: контрольные вопросы 163
Проверьте свои знания: ответы 163
Г Л А В А 5. Числовые типы 165
Основы числовых типов 165
Числовые литералы 166
Встроенные инструменты для обработки объектов чисел 168
Операции выражений Python 168
Числа в действии 173
Переменные и базовые выражения 173
Форматы числового отображения 175
Сравнения: нормальные и сцепленные 176
Деление: классическое, с округлением в меньшую сторону и настоящее 178
Точность целых чисел 182
Комплексные числа 183
Шестнадцатеричная, восьмеричная и двоичная формы записи:
литералы и преобразования 183
Побитовые операции 185
Другие встроенные инструменты для обработки чисел 187
Другие числовые типы 189
Десятичные типы 189
Дробный тип 192
Множества 195
Булевские значения 203
Численные расширения 204
Резюме 205
10 Содержание
Проверьте свои знания: контрольные вопросы 205
Проверьте свои знания: ответы 205
Г Л А В А 6. Кратко о динамической типизации 207
Случай отсутствия операторов объявления 207
Переменные, объекты и ссылки 208
Типы обитают в объектах, не в переменных 210
Объекты подвергаются сборке мусора 210
Разделяемые ссылки 212
Разделяемые ссылки и изменения на месте 214
Разделяемые ссылки и равенство 215
Динамическая типизация вездесуща 217
Резюме 218
Проверьте свои знания: контрольные вопросы 218
Проверьте свои знания: ответы 218
Г Л А В А 7. Фундаментальные основы строк 219
Вопросы, раскрываемые в главе 219
Unicode: краткая история 220
Основы строк 220
Строковые литералы 222
Строки в одинарных и двойных кавычках являются одинаковыми 223
Управляющие последовательности представляют специальные символы 223
Неформатированные строки подавляют управляющие последовательности 227
Утроенные кавычки представляют многострочные блочные строки 228
Строки в действии 230
Базовые операции 230
Индексация и нарезание 231
Инструменты преобразования строк 235
Изменение строк, часть I 238
Строковые методы 239
Синтаксис вызова методов 239
Методы строк 240
Примеры строковых методов: изменение строк, часть II 241
Примеры строковых методов: разбор текста 243
Другие распространенные строковые методы в действии 244
Функции первоначального модуля string (изъяты из Python 3.X) 245
Выражения форматирования строк 246
Основы выражений форматирования 247
Расширенный синтаксис выражений форматирования 248
Более сложные примеры использования выражений форматирования 249
Выражения форматирования, основанные на словаре 250
Вызовы методов форматирования строк 251
Основы методов форматирования 251
Добавление ключей, атрибутов и смещений 252
Расширенный синтаксис методов форматирования 253
Более сложные примеры использования методов форматирования 254
Сравнение с выражением форматирования % 256
Для чего используется метод format? 259
Содержание 11
Общие категории типов 264
Типы разделяют наборы операций по категориям 264
Изменяемые типы можно модифицировать на месте 265
Резюме 266
Проверьте свои знания: контрольные вопросы 266
Проверьте свои знания: ответы 267
Г Л А В А 8. Списки и словари 268
Списки 268
Списки в действии 270
Базовые списковые операции 271
Итерация по спискам и списковые включения 271
Индексация, нарезание и матрицы 272
Изменение списков на месте 273
Словари 279
Словари в действии 280
Базовые словарные операции 281
Изменение словарей на месте 282
Дополнительные словарные методы 283
Пример: база данных о фильмах 285
Замечания по использованию словарей 287
Другие способы создания словарей 291
Изменения в словарях в Python 3.X и 2.7 293
Резюме 300
Проверьте свои знания: контрольные вопросы 301
Проверьте свои знания: ответы 301
Г Л А В А 9. Кортежи, файлы и все остальное 302
Кортежи 303
Кортежи в действии 304
Для чего используются списки и кортежи? 307
Снова о записях: именованные кортежи 307
Файлы 309
Открытие файлов 310
Использование файлов 311
Файлы в действии 313
Кратко о текстовых и двоичных файлах 314
Хранение объектов Python в файлах: преобразования 315
Хранение собственных объектов Python: модуль pickle 317
Хранение объектов Python в формате JSON 318
Хранение упакованных двоичных данных: модуль struct 320
Диспетчеры контекстов для файлов 321
Другие файловые операции 322
Обзор и сводка по основным типам 323
Гибкость объектов 324
Ссылки или копии 326
Сравнения, равенство и истинность 328
Смысл понятий “истина” и “ложь” в Python 331
Иерархии типов Python 333
12 Содержание
Объекты type 333
Прочие типы в Python 335
Затруднения, связанные со встроенными типами 335
Присваивание создает ссылки, а не копии 336
Повторение добавляет один уровень глубины 336
Остерегайтесь циклических структур данных 337
Неизменяемые типы нельзя модифицировать на месте 338
Резюме 338
Проверьте свои знания: контрольные вопросы 339
Проверьте свои знания: ответы 339
Проверьте свои знания: упражнения для части II 340
Часть III. Операторы и синтаксис 343
ГЛАВА 10. Введение в операторы Python 344
Еще раз о концептуальной иерархии Python 344
Операторы Python 345
История о двух if 347
Что Python добавляет 347
Что Python устраняет 348
Для чего используется синтаксис с отступами? 349
Несколько специальных случаев 352
Короткий пример: интерактивные циклы 354
Простой интерактивный пример 354
Выполнение математических действий над пользовательским вводом 356
Обработка ошибок путем проверки ввода 357
Обработка ошибок с помощью оператора try 358
Вложение кода на три уровня в глубину 360
Резюме 361
Проверьте свои знания: контрольные вопросы 361
Проверьте свои знания: ответы 361
ГЛАВА 11. Операторы присваивания, выражений и вывода 362
Операторы присваивания 362
Формы оператора присваивания 363
Присваивание последовательности 364
Расширенная распаковка последовательностей в Python 3.X 367
Групповые присваивания 371
Дополненные присваивания 372
Правила именования переменных 375
Операторы выражений 379
Операторы выражений и изменения на месте 380
Операции вывода 380
Функция print в Python 3.X 381
Оператор print в Python 2.X 384
Перенаправление потока вывода 385
Вывод, нейтральный к версии 389
Резюме 392
Содержание 13
Проверьте свои знания: контрольные вопросы 393
Проверьте свои знания: ответы 393
ГЛАВА 12. Проверки if и правила синтаксиса 394
Операторы if 394
Общий формат 394
Элементарные примеры 395
Множественное ветвление 395
Снова о синтаксисе Python 398
Ограничители блоков: правила отступов 399
Ограничители операторов: строки и продолжения 401
Несколько особых случаев 402
Значения истинности и булевские проверки 404
Тернарное выражение if/else 405
Резюме 408
Проверьте свои знания: контрольные вопросы 409
Проверьте свои знания: ответы 409
ГЛАВА 13. Циклы while и for 410
Циклы while 410
Общий формат 410
Примеры 411
Операторы break, continue, pass и конструкция else цикла 412
Общий формат цикла 412
Оператор pass 412
Оператор continue 414
Оператор break 414
Конструкция else цикла 415
Циклы for 417
Общий формат 418
Примеры 418
Методики написания циклов 425
Циклы с подсчетом: range 425
Просмотр последовательностей: while и range или for 426
Тасование последовательностей: range и len 427
Неполный обход: range или срезы 428
Изменение списков: range или включения 429
Параллельные обходы: zip и map 430
Генерация смещений и элементов: enumerate 433
Резюме 436
Проверьте свои знания: контрольные вопросы 437
Проверьте свои знания: ответы 437
ГЛАВА 14. Итерации и включения 438
Итерации: первый взгляд 438
Протокол итерации: итераторы файловых объектов 439
Ручная итерация: iter и next 442
Итерируемые объекты других встроенных типов 445
14 Содержание
Списковые включения: первый подробный взгляд 447
Основы списковых включений 448
Использование списковых включений с файлами 449
Расширенный синтаксис списковых включений 451
Другие итерационные контексты 453
Новые итерируемые объекты в Python 3.X 457
Влияние на код Python 2.X: доводы за и против 457
Итерируемый объект range 458
Итерируемые объекты map, zip и filter 459
Итераторы с множеством проходов или с одним проходом 461
Итерируемые словарные представления 462
Другие темы, связанные с итерацией 464
Резюме 464
Проверьте свои знания: контрольные вопросы 465
Проверьте свои знания: ответы 465
ГЛАВА 15. Документация 466
Источники документации Python 466
Комментарии # 467
Функция dir 467
Строки документации: __doc__ 469
PyDoc: функция help 472
PyDoc: отчеты в формате HTML 475
За рамками строк документации: Sphinx 483
Стандартный набор руководств 483
Веб-ресурсы 484
Изданные книги 485
Распространенные затруднения при написании кода 485
Резюме 487
Проверьте свои знания: контрольные вопросы 488
Проверьте свои знания: ответы 488
Проверьте свои знания: упражнения для части III 489
Часть IV. Функции и генераторы 491
ГЛАВА 16. Основы функций 492
Для чего используются функции? 493
Написание кода функций 494
Операторы def 496
Оператор def исполняется во время выполнения 496
Первый пример: определения и вызовы 497
Определение 497
Вызов 497
Полиморфизм в Python 498
Второй пример: пересечение последовательностей 499
Определение 500
Вызов 500
Еще раз о полиморфизме 501
Локальные переменные 502
Содержание 15
Резюме 502
Проверьте свои знания: контрольные вопросы 503
Проверьте свои знания: ответы 503
ГЛАВА 17. Области видимости 504
Основы областей видимости в Python 504
Детали, касающиеся областей видимости 505
Распознавание имен: правило LEGB 507
Пример области видимости 510
Встроенная область видимости 511
Оператор global 514
Проектирование программы: минимизируйте количество глобальных
переменных 515
Проектирование программы: минимизируйте количество межфайловых
изменений 516
Другие способы доступа к глобальным переменным 518
Области видимости и вложенные функции 519
Детали вложенных областей видимости 519
Примеры вложенных областей видимости 519
Фабричные функции: замыкания 520
Сохранение состояния из объемлющей области видимости с помощью
стандартных значений 523
Оператор nonlocal в Python 3.X 527
Основы оператора nonlocal 527
Оператор nonlocal в действии 529
Для чего используются оператор nonlocal? Варианты сохранения состояния 531
Состояние с помощью оператора nonlocal: только Python 3.X 531
Состояние с помощью глобальных переменных: только одиночная копия 532
Состояние с помощью классов: явные атрибуты (предварительный обзор) 533
Состояние с помощью атрибутов функций: Python 3.X и 2.X 534
Резюме 538
Проверьте свои знания: контрольные вопросы 539
Проверьте свои знания: ответы 540
ГЛАВА 18. Аргументы 541
Основы передачи аргументов 541
Аргументы и разделяемые ссылки 542
Избегайте модификации изменяемых аргументов 544
Эмуляция выходных параметров и множественных результатов 545
Специальные режимы сопоставления аргументов 546
Основы сопоставления аргументов 547
Синтаксис сопоставления аргументов 548
Особенности использования специальных режимов сопоставления 549
Примеры ключевых слов и стандартных значений 550
Примеры произвольного количества аргументов 552
Аргументы с передачей только по ключевым словам Python 3.X 557
Функция min 560
Основная задача 561
Дополнительные очки 562
16 Содержание
Заключение 563
Обобщенные функции для работы с множествами 563
Эмуляция функции print из Python 3.X 565
Использование аргументов с передачей только по ключевым словам 567
Резюме 569
Проверьте свои знания: контрольные вопросы 569
Проверьте свои знания: ответы 570
ГЛАВА 19. Расширенные возможности функций 571
Концепции проектирования функций 571
Рекурсивные функции 573
Суммирование с помощью рекурсии 574
Альтернативные варианты кода 574
Операторы цикла или рекурсия 576
Обработка произвольных структур 576
Объекты функций: атрибуты и аннотации 580
Косвенные вызовы функций: “первоклассные” объекты 580
Интроспекция функций 581
Атрибуты функций 582
Аннотации функций в Python 3.X 583
Анонимные функции: выражения lambda 585
Основы выражения lambda 586
Для чего используется выражение lambda? 587
Как (не) запутать свой код на Python 589
Области видимости: выражения lambda также могут быть вложенными 590
Инструменты функционального программирования 591
Отображение функций на итерируемые объекты: map 592
Выбор элементов из итерируемых объектов: filter 594
Комбинирование элементов из итерируемых объектов: reduce 594
Резюме 596
Проверьте свои знания: контрольные вопросы 596
Проверьте свои знания: ответы 596
ГЛАВА 20. Включения и генераторы 598
Списковые включения и инструменты функционального программирования 598
Списковые включения или map 599
Добавление проверок и вложенных циклов: filter 600
Пример: списковые включения и матрицы 603
Не злоупотребляйте списковыми включениями: KISS 605
Генераторные функции и выражения 608
Генераторные функции: yield или return 608
Генераторные выражения: итерируемые объекты встречаются с включениями 614
Генераторные функции или генераторные выражения 618
Генераторы являются объектами с одиночной итерацией 620
Генерация во встроенных типах, инструментах и классах 623
Пример: генерация перемешанных последовательностей 626
Не злоупотребляйте генераторами: EIBTI 631
Пример: эмуляция zip и map с помощью итерационных инструментов 633
Содержание 17
Сводка по синтаксису включений 639
Области видимости и переменные включений 639
Осмысление включений множеств и словарей 641
Расширенный синтаксис включений для множеств и словарей 642
Резюме 642
Проверьте свои знания: контрольные вопросы 643
Проверьте свои знания: ответы 643
ГЛАВА 21. Оценочные испытания 645
Измерение времени выполнения итерационных альтернатив 645
Модуль измерения времени: любительский 646
Сценарий измерения времени 651
Результаты измерения времени 652
Альтернативные версии модуля для измерения времени 655
Другие варианты 658
Измерение времени выполнения итераций и версий Python
с помощью модуля timeit 659
Базовое использование timeit 659
Модуль и сценарий оценочных испытаний: timeit 664
Результаты запуска сценария оценочных испытаний 666
Продолжаем забавляться с оценочными испытаниями 668
Другие темы, связанные с оценочными испытаниями: тест pystone 672
Затруднения, связанные с функциями 673
Локальные имена распознаются статически 673
Стандартные значения и изменяемые объекты 675
Функции без операторов return 677
Прочие затруднения, связанные с функциями 677
Резюме 678
Проверьте свои знания: контрольные вопросы 678
Проверьте свои знания: ответы 679
Проверьте свои знания: упражнения для части IV 679
Часть V. Модули и пакеты 683
ГЛАВА 22. Модули: общая картина 684
Для чего используются модули? 684
Архитектура программы Python 685
Структурирование программы 686
Импортирование и атрибуты 686
Стандартные библиотечные модули 688
Как работает импортирование 689
1. Поиск файла модуля 689
2. Компиляция файла модуля (возможная) 690
3. Выполнение файла модуля 691
Файлы байт-кода: __pycache__ в Python 3.2+ 691
Модели файлов байт-кода в действии 692
Путь поиска модулей 693
Конфигурирование пути поиска 696
18 Содержание
Вариации пути поиска 696
Список sys.path 697
Выбор файла модуля 698
Резюме 700
Проверьте свои знания: контрольные вопросы 701
Проверьте свои знания: ответы 701
ГЛАВА 23. Основы написания модулей 702
Создание модулей 702
Имена файлов модулей 702
Другие виды модулей 703
Использование модулей 703
Оператор import 703
Оператор from 704
Оператор from * 704
Операции импортирования происходят только однократно 705
Операторы import и from являются присваиваниями 706
Эквивалентность import и from 707
Потенциальные затруднения, связанные с оператором from 708
Пространства имен модулей 709
Файлы генерируют пространства имен 709
Словари пространств имен: __dict__ 711
Уточнение имен атрибутов 712
Импортирование или области видимости 712
Вложение пространств имен 713
Перезагрузка модулей 714
Основы использования reload 715
Пример использования reload 716
Резюме 718
Проверьте свои знания: контрольные вопросы 718
Проверьте свои знания: ответы 719
ГЛАВА 24. Пакеты модулей 720
Основы импортирования пакетов 721
Пакеты и настройки пути поиска 721
Файлы __init__.py пакетов 722
Пример импортирования пакетов 724
Использование from или import с пакетами 726
Для чего используется импортирование пакетов? 727
История о трех системах 727
Относительное импортирование пакетов 730
Изменения в Python 3.X 731
Основы относительного импортирования 732
Для чего используются операции относительного импортирования? 733
Границы действия операций относительного импортирования 736
Сводка по правилам поиска модулей 736
Операции относительного импортирования в действии 737
Затруднения, связанные с операциями импортирования относительно пакетов:
смешанное использование 742
Содержание 19
Пакеты пространств имен, введенные в Python 3.3 748
Семантика пакетов пространств имен 749
Влияние на обычные пакеты: необязательность __init__.py 750
Пакеты пространств имен в действии 751
Вложение пакетов пространств имен 752
Файлы по-прежнему имеют приоритет над каталогами 753
Резюме 756
Проверьте свои знания: контрольные вопросы 756
Проверьте свои знания: ответы 756
ГЛАВА 25. Расширенные возможности модулей 758
Концепции проектирования модулей 758
Сокрытие данных в модулях 760
Сведение к минимуму вреда от from *: _X и __all__ 760
Включение будущих языковых средств: __future__ 761
Смешанные режимы использования: __name__ и __main__ 762
Модульное тестирование с помощью __name__ 763
Пример: код с двойным режимом 764
Символы валют: Unicode в действии 767
Строки документации: документация по модулям в работе 769
Изменение пути поиска модулей 770
Расширение as для операторов import и from 771
Пример: модули являются объектами 772
Импортирование модулей по строкам с именами 775
Выполнение строк с кодом 775
Прямые вызовы: два варианта 776
Пример: транзитивная перезагрузка модулей 777
Инструмент рекурсивной перезагрузки 777
Альтернативные реализации 780
Затруднения, связанные с модулями 784
Конфликты имен модулей: операции импортирования пакетов
и относительно пакетов 784
Порядок следования операторов в коде верхнего уровня имеет значение 785
Оператор from копирует имена, но не ссылки на них 786
Форма оператора from * может сделать неясным смысл переменных 787
Функция reload может не оказывать влияния на результаты операторов
импортирования from 787
reload, from и тестирование в интерактивном сеансе 788
Рекурсивные операции импортирования from могут не работать 789
Резюме 790
Проверьте свои знания: контрольные вопросы 791
Проверьте свои знания: ответы 791
Проверьте свои знания: упражнения для части V 792
П Р И Л О Ж Е Н И Е . Решения упражнений, приводимых в конце частей 794
Предметный указатель 819