"The joy of coding Python should be in seeing short, concise, readable classes that express a lot of action in a small amount of clear code — not in reams of trivial code that bores the reader to death."
Guido van Rossum
Python — язык программирования, на котором приятно писать и который приятно читать. Мы предлагаем тринадцать лекций осеннего курса CS центра, чтобы посмотреть вглубь языка и попробовать понять, как пользоваться всеми его возможностями. Лекции читает Сергей Лебедев, разработчик в компании JetBrains и преподаватель в Computer Science Center.
Мало освоить синтаксис, чтобы узнать язык программирования: нужно осознать идиомы языка и научиться их применять. В течение курса Сергей знакомит слушателей с идиомами и возможностями языка Python.
Фотография сделана осенью 2014 года в Страсбурге, за две недели до начала первого прочтения этого курса.
Лекции курса
Видеозаписи всех лекций в плейлисте на YouTube.
Начало
Кто, когда и зачем придумал язык Python. Интерпретаторы языка. Синтаксис языка с высоты птичьего полёта. Интерактивная оболочка IPython.
Всё, что вы хотели знать о функциях в Python
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы
global
и nonlocal
. Функциональное программирование, анонимные функции. Функции map
, filter
и zip
. Генераторы списков, множеств и словарей. Немного о PEP 8.Декораторы и модуль functools
Синтаксис декораторов. Декораторы с аргументами, без аргументов. Примеры использования декораторов. Модуль
functools
.Строки, байты, файлы и ввод/вывод
Строковые литералы и сырые строки. Строки и Юникод. Основные методы работы со строками. Модуль
string
. Байты. Кодировки. Файлы и файловые объекты. Методы работы с файлами. Модуль io
.Встроенные коллекции и модуль collections
И снова встроенные коллекции: кортеж, список, множество, словарь — обход в глубину, обзор методов, примеры. Почти всё про модуль
collections
: именованные кортежи, счётчики, defaultdict
, OrderedDict
.Классы, часть 1
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы,
__dict__
, __slots__
. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.Исключения и менеджеры контекста
Исключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы
BaseException
и Exception
. Операторы try...except..else..finally
. Менеджеры контекста и модуль contextlib
.Итераторы, генераторы и модуль itertools
Два протокола итераторов:
__next__
+ __iter__
и __getitem__
. Итераторы и цикл for
, а также операторы in
и not in
. Генераторы, оператор-выражение yield
. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools
.Модули, пакеты и система импорта
Модули. Операторы
import
и from ... import
. Пакеты. Относительный и абсолютный импорт. __init__
-фасад. И снова оператор import
— обход в глубину.Классы, часть 2
Дескрипторы: что-как-зачем. Конструктор
__new__
, класс type
и метаклассы. Наследование встроенных типов. Модули abc
и collections.abc
.Тестирование
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль
unittest
. Пакет py.test
— на порядок лучше. Тестирование свойств и пакет hypothesis
.Быстрее, Python, ещё быстрее
Измерение времени работы кода на Python с помощью модулей
timeit
, cProfile
и line_profiler
. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.Многопоточность и GIL
Модули
threading
, queue
и concurrent.futures
. Использование потоков для параллельных вычислений на Python. GIL. Параллельность и конкурентность. Модуль asyncio
. Модуль multiprocessing
.Что дальше
Практические задания этого курса доступны только студентам CS центра, учащиеся набираются раз в год, весной. Тем, кто по каким-то причинам не может проходить обучение в центре, мы рекомендуем не останавливаться на просмотре видео курса, а попробовать решать на Python свои повседневные задачи, ведь главное в изучении языка — это практика.
Для разных языков есть списки хороших библиотек, например, Awesome Java, Awesome R и Awesome C++. Конечно же, такой список есть и для Python. В следующий раз, когда вам потребуется библиотека для работы с базой данных, логирования или анализа изображений, смело идите в соответствующий раздел списка за вдохновением.
Комментарии (30)
brainick
29.03.2016 16:50+18>>Практические задания этого курса доступны только студентам CS центра
что снижает ценность курса очень сильно.
shvetsiya
29.03.2016 21:17+2Не планируете ли в будущем запустить курс на stepic?
katherins
29.03.2016 21:21+1Сейчас на Stepic уже есть несколько курсов по Python, курс от Сергея пока не планируется, но если будем запускать, обязательно расскажем.
Postalus
29.03.2016 22:26+1Сейчас там 2 курса:
stepic.org/course/67 — совсем базовый для абсолютных новичков.
stepic.org/course/512 — пока не открыт, но судя по набору тем — обещает быть не намного более продвинутым.
Ещё один курс (наиболее продвинутый) должен был стартовать 10 марта, но его отменили. Так что ничего сравнимого с курсом Сергея Лебедева по Питону сейчас на Степике нет.
andrievski88
29.03.2016 21:17+1Скажите пожалуйста, я стою перед вопросом изучения Python или PHP, учитывая, что JS я знаю на слабую троечку по пяти бальной. Будет ли полезным для меня ваш курс или искать, что-то попроще?
katherins
29.03.2016 21:27+1Курс ориентирован на тех, кто уже хорошо знаком с другими языками программирования или писал на Python. Получается, что лучше начинать изучать язык не с этих видео, но в любом случае можно попробовать и решить для себя, стоит ли сейчас смотреть дальше или отложить на потом.
qvas
29.03.2016 21:21+1А есть тоже самое, но в виде книги?
katherins
29.03.2016 21:33+1Какую-то одну книгу сложно посоветовать, поэтому предлагаю обратить внимание на список литературы на странице курса.
J_K
29.03.2016 21:32-1>>>Python — язык программирования, на котором приятно писать и который приятно читать.
Очень, очень спорное заявление.kolyaflash
29.03.2016 21:58+4А почему? Странно слышать непопулярное мнение без подробностей.
J_K
29.03.2016 22:11-6Непопулярное? Да ладно! Наберите в гугле «why do people hate python», ну или чтобы далеко не ходить, вот несколько ответов здесь: https://www.quora.com/Why-do-people-hate-Python
Лично меня безумно бесят отступы. Вот ничего не могу с собой поделать, после C++, JavaScript, Java и C# писать на языке, логика которого основана на отступах, просто невозможно. Тем, у кого это первый ЯП, наверное, нормально, они просто еще не знают, что есть языки, в которых такой заморочки нет.Spirans
29.03.2016 22:26+7why people hate python — 620.000 результатов
why people love python — 15.800.000 результатов, по версии гугла. так что это таки непопулярное мнение :)
довод про отступы достаточно странный, с учетом того, что любая IDE сама занимается вопросом отступов и с высокой вероятностью код на большинстве языком все равно будет с отступами.
а сам курс хороший, спасибо, есть интересные моменты.skssxf
30.03.2016 14:59Ещё немного версий гугла в процентах за/против:
python: 97/3
java: 70/30
javascript: 84/16
и внезапно
ada: 98/2 — вот он, лидер! Простота, элегантность, отступы и скобочки… А люди любят begin-end
В общем, к версиям гугла нужно с осторожностью подходить.
drafterleo
29.03.2016 22:35+2Вы пишете без отступов? Экономите пробелы? :) Лично меня в классических языках несколько напрягают длиннющие лесенки закрывающих фигурных скобок, когда по отступам и без того понятно, где какой структурный блок.
J_K
29.03.2016 22:45+3Нет, я не пишу без отступов. И пробелы не экономлю. Но гораздо приятнее и яснее для глаза ограничивать блоки явными символами (фигурная скобка в данном случае).
JC_Piligrim
30.03.2016 02:47+1Вы просто пока не поняли дзен Python. Ничего, это бывает. Просто, похоже, что вы изначально начали изучать программирование с языка, где были скобочки для оформления блоков, поэтому приросли к догме, что «нет другого синтаксиса, кроме как в C и фигурные скобки — неизменный атрибут его». Я тоже поначалу после долгих лет практики с C-like языками (C, JS, PHP) смотрел на Python как-то странно. А потом всё понял.
Python за лаконичность. В данном случае избавляет от необходимости повторять по 2 раза. Зачем оформлять код И скобочками И отступами (как в стандартах кодирования всех С-like языков), когда можно использовать только один инструмент для этого? Всё равно всем приходится делать отступы, чтобы код не превращался в кашу. Опять же, визуальное, графическое выделение блоков в plain-text, да без использования лишних замусоривающих символов — а в этом что-то есть от ТРИЗ, кстати.J_K
30.03.2016 05:19+3Спасибо за развернутый ответ. Как-то не приходилось смотреть на код именно с этой стороны, надо будет попробовать.
Скобки мне нравятся за их явность — неважно, где они стоят, если они есть, они формируют блок. Код, который компилируется только если правильно отформатирован, кажется мне по меньшей мере странным.Angel2S2
30.03.2016 14:14+2Скобки мне нравятся за их явность — неважно, где они стоят, если они есть, они формируют блок.
В пайтон взглянул на код и сразу видишь, что это блок, где начинается и где заканчивается. А со скобками, надо еще внимание обратить, что тут есть скобка, а потом найти, где парная закрывающая скобка. Например, в С if (...) {then} нужно проверить наличие скобки в конце строки (ведь не все ставят скобку под if), чтобы понять, код под if является then или это уже другой код. А если код еще и не оформлен… В пайтон — если под if есть отступ, значит это then, если нет — другой код. Визуально код воспринимается легче, поэтому и читать его проще.
Код, который компилируется только если правильно отформатирован, кажется мне по меньшей мере странным.
Так в этом то и плюс большой. Пайтон «заставляет» изначально программиста правильно оформлять код. Я вот, например, не могу нормально читать код, который не оформлен. Ладно еще если там десяток строк, но если их 100+… С другой стороны, пока найдешь «лишнюю» скобку, тем более в не оформленном коде, может не мало времени пройти. Или когда нужно большой блок, скажем, if...then убрать в большой функции, искать где конец (закрывающая скобка) порой бывает не очень просто, тем более если код не оформлен. В пайтон с этим проблем нет, хоть в блокноте читай и правь. Да, многие IDE сильно облегчают весь процесс в поиске этих скобок, но речь не об этом.TimeCoder
30.03.2016 17:47+2Позволю себе возразить. Фигурные скобки в С (С++/Java/C#) — это не только элемент для обозначения блоков кода, но еще и естестественный способ слегка разрядить код. От одного хорошего программиста, много лет назад, перенял я такую привычку: не экономить пробелы. В однородном потоке кода те строки, которые образуют некую логически цельную группу я пишу без пробелов, потом пробел, и следующая группа — получается набор "шагов". Между методами — два пробела. После if, while, for, foreach — за счет скобки получается пробельная строка, это естественным образом облегчает код. И еще момент: видя закрывающую скобку в длинном файле кода, я могу подвести к ней указатель мыши и мне высветится код начала этой строки, т.е. будет видно, какой из циклов или if-ов здесь закрывается.
Angel2S2
31.03.2016 12:00У меня в C# после Pascal был вау-эффект от скобок, после этих begin...end. Код казался значительно понятнее и мне проще было в нем ориентироваться. Сейчас изучаю(!) python, влюбился в него "с первого раза". На НЕ больших блоках (примерах) кода со скобками мне такой код удобнее воспринимать и читать код, чем код пайтона. А вот с большими кусками кода все наоборот, а если код еще и не отформатирован и без подсветки это жесть. Все же фломастеры на вкус и цвет для всех разные.
С привычкой "не экономиться пробелы" полностью согласен. Такой код и без подсветки читается не плохо.
И еще момент: видя закрывающую скобку в длинном файле кода, я могу подвести к ней указатель мыши и мне высветится код начала этой строки, т.е. будет видно, какой из циклов или if-ов здесь закрывается.
Выше я писалДа, многие IDE сильно облегчают весь процесс в поиске этих скобок, но речь не об этом.
Понятное дело, что программист работает в своей среде, которая настроена так, как ему удобно. Но это, на мой взгляд, не имеет отношение к какому-то конкретному языку.
Если в C/C++/Java/C#/etc можно написать код без форматирования и отступов, то в python это уже не прокатит, т.о. код всегда отформатирован, с первых строк.TimeCoder
31.03.2016 15:11Сравню с книгой: новая глава начинается с нового листа (Питон), но иногда в начале еще рисуется три звездочки, что подчеркивает начало нового раздела (C#).
mukizu
06.04.2016 00:17То ли дело Python, где уже есть набор pep'ов, которые очень долго прорабатывались и где уже описано, где сколько переносов строк и прочих пробелов должно быть :)
Лучше только в Go, где код вообще за тебя отформатируют
kolyaflash
29.03.2016 22:36+3Набрал — не увидел ничего необычного. Python «любят» за элегантность кода и «ненавидят» по совсем другим причинам (динамическая типизация, GIL, быстродействие и т.д.).
J_K
29.03.2016 23:01Мы с вами не обсуждали, за что конкретно любят или ненавидят тот или иной язык. Вы посчитали данное мнение непопулярным, а я нет, а за что и почему, это другой вопрос.
kolyaflash
29.03.2016 23:37+4Мы с вами обсуждали «Python приятно писать и читать» и ваше несогласие с этим, так что это именно тот вопрос.
Элегантность кода — это главная фича Python и это не мнение, а принцип заложенный в язык изначально. Так что не считать ваше мнение непопулярным так же странно, как и иметь такое мнение впринципе не объясняя причин.
vechnoe
29.03.2016 23:08+4А меня раздражают скобки в других языках после Python. Но самый элегантный язык это, конечно, Лисп. А в Python больше всего раздражает раздутая стандартная библиотека, политика Гвидо (помянем reduce), затягивание перехода на 3 версию.
Mixim333
30.03.2016 18:21С Python'ом хотел познакомится еще года 3-4 назад, купил книгу Лутца, но руки так и не доходили до нее, все писал на .NET\C#. Буквально пару дней назад работа заставила реализовать небольшое приложение на Python (использование re, чтение\запись в файл и т.д.) и что Вы думаете: работу завершил примерно за час, хотя до этого на практике Python никогда в глаза не видел.
Так что Вы в корне не правы насчет Python!
fireSparrow
30.03.2016 20:04+4У меня основной опыт программирования был на JS.
Когда несколько месяцев назад я познакомился с Python, мне показалась очень странной идея задавать логику через форматирование.
Но сейчас я считаю это очень удачной находкой.
И во всём остальном код на Python вызывает у меня сильное эстетическое удовольствие.
riivers
Плохо слышно вопросы из зала. А так курс очень крутой!