Программирование на Python

Санкт-Петербург, осень 2014

Описание

Курс ориентирован на людей, уже знакомых с каким-либо языком программирования, например, Java или C++.

Логистика курса

Все активности в рамках курса будут оцениваться баллами. Необходимое количество баллов для получения зачёта будет объявлено позже.

Домашние задания

Домашние задания будут выдаваться после лекции. Количество баллов за домашнее задание зависит от времени сдачи:

  • в течение недели после лекции (до 23:59 вторника) за каждую задачу из домашнего задания можно будет получить максимум 4 балла,
  • в течение второй стоимость задачи будет 2 баллa.

Сдавать домашнее задание позже, чем через две недели, смысла нет: оно будет оценено 0 баллов.

Задачи в домашнем задании будут оцениваться по двум критериям: корректность и идиоматичность, то есть решение должно правильно работать и соответствовать руководству по стилю.

Тесты

В начале каждой лекции (кроме первой) будет короткий тест по материалам предыдущей лекции. За полностью правильный тест можно получить 4 балла.

Для желающих улучшить свои результаты в конце семестра планируется большой тест. При написании большого теста все баллы за лекционные тесты аннулируются.

Хорошие книги про Python

  1. David M. Beazley, Python Essential Reference, 2009.
  2. Mark Lutz, Learning Python, 5th edition, 2013 (значительная часть 4-го издания также будет релевантной).
  3. David M. Beazley, Brian K. Jones, Python Cookbook, 3rd edition, 2013.

Предварительная программа

  1. Кто, когда и зачем придумал язык Python. 2 или 3 -- вот в чём вопрос. Интерпретаторы языка Python. Синтаксис языка с высоты птичьего полёта.
  2. Всё, что вы хотели знать о функциях в Python:
    • именованные и лямбда-функции;
    • позиционные и ключевые аргументы и почему они не отличаются;
    • упаковка и распаковка аргументов, когда и зачем;
    • map, filter и почему вам не нужен reduce;
    • декораторы.
  3. Строки в Python: bytes, str -- зачем так много. Кодировки, файлы и file-like объекты: обертки над строками и последовательностями байт, архивы, HTTP ресурсы.
  4. Классы, атрибуты, методы и прочее ООП
    • конструктор и инициализатор;
    • старые и новые классы или лирическое отступление об истории языка;
    • атрибуты класса и объекта;
    • магические методы и перегрузка операторов;
    • __dict__ объекта, класса или что происходит, когда вы пишете foo.bar.baz;
    • наследование, super
    • множественное наследование, mro.
    • наследование встроенных типов: проблемы и решения.
    • дескрипторы: когда и зачем.
  5. Исключения. Модули и (возможно) протокол импортеров.
  6. Итераторы и генераторы: протокол итераторов, генераторы и ключевые слова yield и yield from, BIG DATA и itertools.
  7. Метаклассы -- страх и ужас любого программиста на Python.
  8. Подробней о встроенных коллекциях. Модули collections и heapq.
  9. Многопоточность, мультипроцессорность и GIL. asyncio.
  10. Высокопроизводительный Python или, что делать, когда Python тормозит.

Темы, которые со временем найдут своё место в лекциях

  • Интроспекция, модуль inspect.
  • Тестирование и документация кода на Python, как можно и чем лучше: doctest, unittest, nose, py.test.
  • Распространение кода на Python: distutils, setuptools, яица и колёса.
  • Обзор стандартной библиотеки.
  • Сериализация Python объектов.
  • Немного о реализации CPython.
  • Наука + Python == <3, IPython Notebook, numpy, scipy, scikit-*, pandas и matplotlib, ggplot.

Преподаватели

Список лекций

Python, начало

Кто, когда и зачем придумал язык Python. 2 или 3 -- вот в чём вопрос. Интерпретаторы языка Python. Синтаксис языка с высоты птичьего полёта.

Всё, что вы хотели знать о функциях в Python

Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.

Декораторы и модуль functools

Синтаксис декораторов. Декораторы с аргументами, без аргументов. Примеры использования декораторов. Модуль functools.

Строки, байты, файлы и ввод/вывод

Строковые литералы и сырые строки. Строки и Юникод. Основные методы работы со строками. Модуль string. Байты. Кодировки. Файлы и файловые объекты. Методы работы с файлами. Модуль io.

Встроенные коллекции и модуль collections

И снова встроенные коллекции: кортеж, список, множество, словарь -- обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.

Классы 1

Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.

Модули, исключения и менеджеры контекста

Немного про систему импорта и операторы import и from...import. Исключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы BaseException и Exception. Операторы try...except..else..finally. Менеджеры контекста и модуль contextlib.

Итераторы, генераторы и модуль itertools

Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.

Классы 2

Дескрипторы: что-как-зачем. Конструктор __new__, класс type и метаклассы. Наследование встроенных типов. Модули abc и collections.abc.

Быстрее, Python, ещё быстрее

Основы IPython. Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. JIT и AOT компиляция кода на Python на примере Numba и Cython.

Многопоточность и GIL

Модули threading, queue и concurrent.futures. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль multiprocessing. GIL в картинках.