Математический анализ. 3е издание
Скачать 4.86 Mb.
|
14. Документация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 Источники документации в языке Python . . . . . . . . . . . . . . . . . . . . . . . 364 Типичные ошибки программирования . . . . . . . . . . . . . . . . . . . . . . . . . . 377 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 IV. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 15. Основы функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Зачем нужны функции? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Создание функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Первый пример: определения и вызовы . . . . . . . . . . . . . . . . . . . . . . . . . 390 Второй пример: пересечение последовательностей . . . . . . . . . . . . . . . . 393 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 16. Области видимости и аргументы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Правила видимости . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Инструкция global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Области видимости и вложенные функции . . . . . . . . . . . . . . . . . . . . . . 410 Передача аргументов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Специальные режимы сопоставления аргументов . . . . . . . . . . . . . . . . 423 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 17. Расширенные возможности функций . . . . . . . . . . . . . . . . . . . . . . . . 440 Анонимные функции: lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Применение функций к аргументам . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Отображение функций на последовательности: map . . . . . . . . . . . . . . 449 Средства функционального программирования: filter и reduce . . . . . 451 Еще раз о генераторах списков: отображения . . . . . . . . . . . . . . . . . . . . 452 Еще раз об итераторах: генераторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 Хронометраж итерационных альтернатив . . . . . . . . . . . . . . . . . . . . . . . 466 Концепции проектирования функций . . . . . . . . . . . . . . . . . . . . . . . . . . 469 Типичные ошибки при работе с функциями . . . . . . . . . . . . . . . . . . . . . 472 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Оглавление 11 V. Модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 18. Модули: общая картина . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 Зачем нужны модули? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 Архитектура программы на языке Python . . . . . . . . . . . . . . . . . . . . . . . 487 Как работает импорт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 19. Основы программирования модулей . . . . . . . . . . . . . . . . . . . . . . . . 501 Создание модуля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 Использование модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 Пространства имен модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Повторная загрузка модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 20. Пакеты модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Основы операции импортирования пакетов . . . . . . . . . . . . . . . . . . . . . . 521 Пример импортирования пакета . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 Зачем используется операция импортирования пакетов? . . . . . . . . . 527 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 21. Дополнительные возможности модулей . . . . . . . . . . . . . . . . . . . . . 533 Сокрытие данных в модулях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 Включение будущих возможностей языка . . . . . . . . . . . . . . . . . . . . . . . 534 Смешанные режимы использования: __name__ и __main__ . . . . . . . 535 Изменение пути поиска модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 Расширение import as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 Синтаксис относительного импорта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 Концепции проектирования модулей . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 Типичные проблемы при работе с модулями . . . . . . . . . . . . . . . . . . . . . 547 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 VI. Классы и ООП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 22. ООП: общая картина . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Зачем нужны классы? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 ООП с высоты 30 000 футов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 12 Оглавление 23. Основы программирования классов . . . . . . . . . . . . . . . . . . . . . . . . . 577 Классы генерируют множество экземпляров объектов . . . . . . . . . . . . 577 Классы адаптируются посредством наследования . . . . . . . . . . . . . . . . 582 Классы могут переопределять операторы языка Python . . . . . . . . . . . 586 Самый простой в мире класс на языке Python . . . . . . . . . . . . . . . . . . . . 589 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 24. Подробнее о программировании классов . . . . . . . . . . . . . . . . . . . . 595 Инструкция class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 Наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Перегрузка операторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 Пространства имен: окончание истории . . . . . . . . . . . . . . . . . . . . . . . . . 624 Более реалистичный пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 25. Шаблоны проектирования с классами . . . . . . . . . . . . . . . . . . . . . . . 637 Python и ООП . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637 Классы как записи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 ООП и наследование: взаимосвязи типа «является» . . . . . . . . . . . . . . 641 ООП и композиция: взаимосвязи типа «имеет» . . . . . . . . . . . . . . . . . . 643 ООП и делегирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648 Множественное наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649 Классы – это объекты: фабрики универсальных объектов . . . . . . . . . 653 Методы – это объекты: связанные и несвязанные методы . . . . . . . . . . 655 Еще раз о строках документирования . . . . . . . . . . . . . . . . . . . . . . . . . . . 657 Классы и модули . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660 26. Дополнительные возможности классов . . . . . . . . . . . . . . . . . . . . . . 661 Расширение встроенных типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661 Псевдочастные атрибуты класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 Классы нового стиля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 Статические методы и методы класса . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 Декораторы функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 Типичные проблемы при работе с классами . . . . . . . . . . . . . . . . . . . . . . 684 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 Оглавление 13 VII. Исключения и инструменты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 27. Основы исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 Зачем нужны исключения? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702 Обработка исключений: краткий обзор . . . . . . . . . . . . . . . . . . . . . . . . . . 704 Инструкция try/except/else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709 Инструкция try/finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 Объединенная инструкция try/except/finally . . . . . . . . . . . . . . . . . . . . 718 Инструкция raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 Инструкция assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 Контекстные менеджеры with/as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 28. Объекты исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 Исключения на основе строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 Исключения на основе классов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 Общие формы инструкции raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 29. Использование исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 Вложенные обработчики исключений . . . . . . . . . . . . . . . . . . . . . . . . . . 751 Идиомы исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 Советы по применению исключений . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Типичные проблемы при работе с исключениями . . . . . . . . . . . . . . . . . 764 Заключение по основам языка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 В заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771 Закрепление пройденного . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 VIII. Приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775 A. Установка и настройка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 B. Решения упражнений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824 Предисловие Эта книга представляет собой введение в язык программирования Py thon. Python – это популярный язык программирования, используе мый как для разработки самостоятельных программ, так и для созда ния прикладных сценариев в самых разных областях применения. Это мощный, переносимый, простой в использовании и свободно распро страняемый язык программирования. Цель этой книги – позволить вам быстро овладеть основными принци пами базового языка Python независимо от уровня вашей подготовки. Прочитав эту книгу, вы получите объем знаний, достаточный для ис пользования Python в самых разных областях. О третьем издании За четыре года, прошедшие с момента выхода второго издания книги в 2003 году, произошли существенные изменения как в самом языке Python, так и в темах, которые я представляю на своих курсах обучения языку Python. Я постарался оставить как можно больше из предыдуще го издания, кроме того, это новое издание отражает изменения послед него времени, появившиеся в самом языке Python и в обучении языку Python. Помимо этого была несколько изменена структура книги. Изменения в языке Python Если говорить о версии языка, это издание описывает Python 2.5 и от ражает все изменения, появившиеся в языке с момента выхода второго издания книги. (Во втором издании описывался язык Python 2.2 и не которые нововведения версии 2.3.) Кроме того, в этом издании обсуж даются изменения, которые ожидаются в версии Python 3.0. Ниже приводится список основных тем, касающихся языка программирова ния, которые вы найдете в этом издании: • Новая условная конструкция B if A else C (глава 12). • Оператор контекста with/as (глава 27). • Унификация конструкции try/except/finally (глава 27). • Синтаксис относительного импорта (глава 21). • Выражениягенераторы (глава 17). • Новые особенности функцийгенераторов (глава 17). 16 Предисловие • Функциидекораторы (глава 26). • Объектный тип множества (глава 5). • Новые встроенные функции: sorted, sum, any, all, enumerate (главы 4 и 13). • Объектный тип десятичных чисел с фиксированной точностью представления (глава 5). • Расширенные сведения о файлах, списках, итераторах и многом другом (главы 13 и 17). • Новые инструменты разработки: Eclipse, dustutils, unittest и doctest, расширения IDLE, Shedskin и т. д. (главы 3 и 29). Менее значительные изменения в языке (такие, как широко исполь зуемые значения True и False, новая функция sys.exc_info, которая воз вращает подробную информацию об исключении, и обработка строко вых исключений, методы для работы со строками и встроенные функ ции apply и reduce) обсуждаются на протяжении всей книги. Кроме того, здесь приводится расширенное описание некоторых новых особенно стей, впервые появившихся в предыдущем издании, включая третье измерение при работе со срезами и передачу произвольного числа ар гументов функции, включая функцию apply. Изменения в обучении языку Python Кроме уже перечисленных изменений в самом языке это издание кни ги дополнено новыми темами и примерами, наработанными мною при преподавании на курсах обучения языку Python в последние годы. На пример, здесь вы найдете: • Новую главу о встроенных типах (глава 4). • Новую главу о синтаксических конструкциях (глава 10). |