Программирование на Python
Санкт-Петербург, осень 2015
Описание
Курс ориентирован на людей, уже знакомых с каким-либо языком программирования, например, Java или C++.
Предварительная программа
- Начало
- Всё, что вы хотели знать о функциях
- Декораторы и модуль
functools
- Строки, байты, файлы и ввод/вывод
- Встроенные коллекции и модуль
collections
- Классы
- Модули, исключения и менеджеры контекста
- Итераторы, генераторы и модуль
itertools
- Документация и тестирование
- Высокопроизводительный Python: миф или реальность?
- Многопоточность и GIL
Возможные темы
- Интроспекция в Python: что можно и невозможно в runtime
- Модули, пакеты: как это работает
- Распространение кода на Python: яица и колёса
- Сериализация: консервировать или нет
- NumPy и другие библиотеки для научных вычислений на Python
- Кооперативная многозадачность и асинхронный ввод/вывод
- Опциональная типизация для Python
Хорошие книги про Python
- David M. Beazley, Python Essential Reference, 2009.
- Mark Lutz, Learning Python, 5th edition, 2013 (значительная часть 4-го издания также будет релевантной).
- David M. Beazley, Brian K. Jones, Python Cookbook, 3rd edition, 2013.
Логистика курса
Все активности в рамках курса будут оцениваться баллами. Необходимое количество баллов для получения зачёта будет объявлено позже.
Домашние задания
Домашние задания будут выдаваться после лекции. Количество баллов за домашнее задание зависит от времени сдачи:
- в течение недели после лекции за каждую задачу из домашнего задания можно будет получить максимум 4 балла,
- в течение второй
стоимость
задачи будет 2 баллa.
Сдавать домашнее задание позже, чем через две недели, смысла нет: оно будет оценено 0 баллов.
Задачи в домашнем задании будут оцениваться по двум критериям: корректность и идиоматичность, то есть решение должно правильно работать и соответствовать руководству по стилю.
Тесты
В начале каждой лекции (кроме первой) будет короткий тест по материалам предыдущей лекции. За полностью правильный тест можно получить 4 балла. Получить баллы за тест каким-либо образом после лекции нельзя.
Преподаватели
Список лекций
Кто, когда и зачем придумал язык Python. Интерпретаторы языка. Синтаксис языка с высоты птичьего полёта. Интерактивная оболочка IPython.
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global
и nonlocal
. Функциональное программирование, анонимные функции. Функции map
, filter
и zip
. Генераторы списков, множеств и словарей. Немного о PEP 8.
Синтаксис декораторов. Декораторы с аргументами, без аргументов. Примеры использования декораторов. Модуль functools
.
Строковые литералы и сырые
строки. Строки и Юникод. Основные методы работы со строками. Модуль string
. Байты. Кодировки. Файлы и файловые объекты. Методы работы с файлами. Модуль io
.
И снова встроенные коллекции: кортеж, список, множество, словарь -- обход в глубину, обзор методов, примеры. Почти всё про модуль collections
: именованные кортежи, счётчики, defaultdict
, OrderedDict
.
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__
, __slots__
. Статические методы и методы класса. Свойства, декоратор @property
. Наследование, перегрузка методов и функция super
. Декораторы классов. Магические методы.
Исключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы BaseException
и Exception
. Операторы try...except..else..finally
. Менеджеры контекста и модуль contextlib
.
Два протокола итераторов: __next__
+ __iter__
и __getitem__
. Итераторы и цикл for
, а также операторы in
и not in
. Генераторы, оператор-выражение yield
. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools
.
Модули. Операторы import
и from ... import
. Пакеты. Относительный и абсолютный импорт. __init__
-фасад. И снова оператор import
--- обход в глубину.
Дескрипторы: что-как-зачем. Конструктор __new__
, класс type
и метаклассы. Наследование встроенных типов. Модули abc
и collections.abc
.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest
. Пакет py.test
--- на порядок лучше. Тестирование свойств и пакет hypothesis
.
Измерение времени работы кода на Python с помощью модулей timeit
, cProfile
и line_profiler
. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Модули threading
, queue
и concurrent.futures
. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio
. Модуль multiprocessing
.