Программирование на Python — курс для желающих узнать о нём больше или изучить ещё один язык программирования

  • Tutorial
"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. В следующий раз, когда вам потребуется библиотека для работы с базой данных, логирования или анализа изображений, смело идите в соответствующий раздел списка за вдохновением.
Образовательные проекты JetBrains
112,18
Компания
Поделиться публикацией

Комментарии 32

    +2
    Плохо слышно вопросы из зала. А так курс очень крутой!
    • НЛО прилетело и опубликовало эту надпись здесь
        +2
        Wow. Поздравляю Сергея.
          +2
          Не планируете ли в будущем запустить курс на stepic?
            +1
            Сейчас на Stepic уже есть несколько курсов по Python, курс от Сергея пока не планируется, но если будем запускать, обязательно расскажем.
              +1
              Сейчас там 2 курса:

              stepic.org/course/67 — совсем базовый для абсолютных новичков.
              stepic.org/course/512 — пока не открыт, но судя по набору тем — обещает быть не намного более продвинутым.
              Ещё один курс (наиболее продвинутый) должен был стартовать 10 марта, но его отменили. Так что ничего сравнимого с курсом Сергея Лебедева по Питону сейчас на Степике нет.
            +1
            Скажите пожалуйста, я стою перед вопросом изучения Python или PHP, учитывая, что JS я знаю на слабую троечку по пяти бальной. Будет ли полезным для меня ваш курс или искать, что-то попроще?
              +1
              Курс ориентирован на тех, кто уже хорошо знаком с другими языками программирования или писал на Python. Получается, что лучше начинать изучать язык не с этих видео, но в любом случае можно попробовать и решить для себя, стоит ли сейчас смотреть дальше или отложить на потом.
              +1
              А есть тоже самое, но в виде книги?
                +1
                Какую-то одну книгу сложно посоветовать, поэтому предлагаю обратить внимание на список литературы на странице курса.
                –1
                >>>Python — язык программирования, на котором приятно писать и который приятно читать.

                Очень, очень спорное заявление.
                  +4
                  А почему? Странно слышать непопулярное мнение без подробностей.
                    –6
                    Непопулярное? Да ладно! Наберите в гугле «why do people hate python», ну или чтобы далеко не ходить, вот несколько ответов здесь: https://www.quora.com/Why-do-people-hate-Python

                    Лично меня безумно бесят отступы. Вот ничего не могу с собой поделать, после C++, JavaScript, Java и C# писать на языке, логика которого основана на отступах, просто невозможно. Тем, у кого это первый ЯП, наверное, нормально, они просто еще не знают, что есть языки, в которых такой заморочки нет.
                      +7
                      why people hate python — 620.000 результатов
                      why people love python — 15.800.000 результатов, по версии гугла. так что это таки непопулярное мнение :)
                      довод про отступы достаточно странный, с учетом того, что любая IDE сама занимается вопросом отступов и с высокой вероятностью код на большинстве языком все равно будет с отступами.
                      а сам курс хороший, спасибо, есть интересные моменты.
                        0
                        Ещё немного версий гугла в процентах за/против:
                        python: 97/3
                        java: 70/30
                        javascript: 84/16
                        и внезапно
                        ada: 98/2 — вот он, лидер! Простота, элегантность, отступы и скобочки… А люди любят begin-end
                        В общем, к версиям гугла нужно с осторожностью подходить.
                        +2
                        Вы пишете без отступов? Экономите пробелы? :) Лично меня в классических языках несколько напрягают длиннющие лесенки закрывающих фигурных скобок, когда по отступам и без того понятно, где какой структурный блок.
                          +3
                          Нет, я не пишу без отступов. И пробелы не экономлю. Но гораздо приятнее и яснее для глаза ограничивать блоки явными символами (фигурная скобка в данном случае).
                            +1
                            Вы просто пока не поняли дзен Python. Ничего, это бывает. Просто, похоже, что вы изначально начали изучать программирование с языка, где были скобочки для оформления блоков, поэтому приросли к догме, что «нет другого синтаксиса, кроме как в C и фигурные скобки — неизменный атрибут его». Я тоже поначалу после долгих лет практики с C-like языками (C, JS, PHP) смотрел на Python как-то странно. А потом всё понял.

                            Python за лаконичность. В данном случае избавляет от необходимости повторять по 2 раза. Зачем оформлять код И скобочками И отступами (как в стандартах кодирования всех С-like языков), когда можно использовать только один инструмент для этого? Всё равно всем приходится делать отступы, чтобы код не превращался в кашу. Опять же, визуальное, графическое выделение блоков в plain-text, да без использования лишних замусоривающих символов — а в этом что-то есть от ТРИЗ, кстати.
                              +3
                              Спасибо за развернутый ответ. Как-то не приходилось смотреть на код именно с этой стороны, надо будет попробовать.
                              Скобки мне нравятся за их явность — неважно, где они стоят, если они есть, они формируют блок. Код, который компилируется только если правильно отформатирован, кажется мне по меньшей мере странным.
                                +2
                                Скобки мне нравятся за их явность — неважно, где они стоят, если они есть, они формируют блок.
                                В пайтон взглянул на код и сразу видишь, что это блок, где начинается и где заканчивается. А со скобками, надо еще внимание обратить, что тут есть скобка, а потом найти, где парная закрывающая скобка. Например, в С if (...) {then} нужно проверить наличие скобки в конце строки (ведь не все ставят скобку под if), чтобы понять, код под if является then или это уже другой код. А если код еще и не оформлен… В пайтон — если под if есть отступ, значит это then, если нет — другой код. Визуально код воспринимается легче, поэтому и читать его проще.

                                Код, который компилируется только если правильно отформатирован, кажется мне по меньшей мере странным.
                                Так в этом то и плюс большой. Пайтон «заставляет» изначально программиста правильно оформлять код. Я вот, например, не могу нормально читать код, который не оформлен. Ладно еще если там десяток строк, но если их 100+… С другой стороны, пока найдешь «лишнюю» скобку, тем более в не оформленном коде, может не мало времени пройти. Или когда нужно большой блок, скажем, if...then убрать в большой функции, искать где конец (закрывающая скобка) порой бывает не очень просто, тем более если код не оформлен. В пайтон с этим проблем нет, хоть в блокноте читай и правь. Да, многие IDE сильно облегчают весь процесс в поиске этих скобок, но речь не об этом.
                                  +2
                                  Позволю себе возразить. Фигурные скобки в С (С++/Java/C#) — это не только элемент для обозначения блоков кода, но еще и естестественный способ слегка разрядить код. От одного хорошего программиста, много лет назад, перенял я такую привычку: не экономить пробелы. В однородном потоке кода те строки, которые образуют некую логически цельную группу я пишу без пробелов, потом пробел, и следующая группа — получается набор "шагов". Между методами — два пробела. После if, while, for, foreach — за счет скобки получается пробельная строка, это естественным образом облегчает код. И еще момент: видя закрывающую скобку в длинном файле кода, я могу подвести к ней указатель мыши и мне высветится код начала этой строки, т.е. будет видно, какой из циклов или if-ов здесь закрывается.
                                    0
                                    У меня в C# после Pascal был вау-эффект от скобок, после этих begin...end. Код казался значительно понятнее и мне проще было в нем ориентироваться. Сейчас изучаю(!) python, влюбился в него "с первого раза". На НЕ больших блоках (примерах) кода со скобками мне такой код удобнее воспринимать и читать код, чем код пайтона. А вот с большими кусками кода все наоборот, а если код еще и не отформатирован и без подсветки это жесть. Все же фломастеры на вкус и цвет для всех разные.
                                    С привычкой "не экономиться пробелы" полностью согласен. Такой код и без подсветки читается не плохо.
                                    И еще момент: видя закрывающую скобку в длинном файле кода, я могу подвести к ней указатель мыши и мне высветится код начала этой строки, т.е. будет видно, какой из циклов или if-ов здесь закрывается.
                                    Выше я писал
                                    Да, многие IDE сильно облегчают весь процесс в поиске этих скобок, но речь не об этом.
                                    Понятное дело, что программист работает в своей среде, которая настроена так, как ему удобно. Но это, на мой взгляд, не имеет отношение к какому-то конкретному языку.
                                    Если в C/C++/Java/C#/etc можно написать код без форматирования и отступов, то в python это уже не прокатит, т.о. код всегда отформатирован, с первых строк.
                                      0
                                      Сравню с книгой: новая глава начинается с нового листа (Питон), но иногда в начале еще рисуется три звездочки, что подчеркивает начало нового раздела (C#).
                                      0
                                      То ли дело Python, где уже есть набор pep'ов, которые очень долго прорабатывались и где уже описано, где сколько переносов строк и прочих пробелов должно быть :)

                                      Лучше только в Go, где код вообще за тебя отформатируют
                            +3
                            Набрал — не увидел ничего необычного. Python «любят» за элегантность кода и «ненавидят» по совсем другим причинам (динамическая типизация, GIL, быстродействие и т.д.).
                              0
                              Мы с вами не обсуждали, за что конкретно любят или ненавидят тот или иной язык. Вы посчитали данное мнение непопулярным, а я нет, а за что и почему, это другой вопрос.
                                +4
                                Мы с вами обсуждали «Python приятно писать и читать» и ваше несогласие с этим, так что это именно тот вопрос.

                                Элегантность кода — это главная фича Python и это не мнение, а принцип заложенный в язык изначально. Так что не считать ваше мнение непопулярным так же странно, как и иметь такое мнение впринципе не объясняя причин.
                              +4
                              А меня раздражают скобки в других языках после Python. Но самый элегантный язык это, конечно, Лисп. А в Python больше всего раздражает раздутая стандартная библиотека, политика Гвидо (помянем reduce), затягивание перехода на 3 версию.
                              • НЛО прилетело и опубликовало эту надпись здесь
                                  +4
                                  У меня основной опыт программирования был на JS.
                                  Когда несколько месяцев назад я познакомился с Python, мне показалась очень странной идея задавать логику через форматирование.
                                  Но сейчас я считаю это очень удачной находкой.
                                  И во всём остальном код на Python вызывает у меня сильное эстетическое удовольствие.
                              0
                              Очень хороший курс, огромное спасибо!
                                0
                                Огромное спасибо за видео! Столько всего полезного узнал!

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое