Как изучить Python самостоятельно и бесплатно: алгоритм
Отдел продаж проклял нас за эту статью! От вас — пара часов в день, от нас — список бесплатных материалов для входа и прокачки в Python.


Иллюстрация: Альберто Блинчиков для Skillbox Media

Python — основной язык в data science и один из трёх главных языков в веб-разработке — наряду с PHP и JavaScript. Кроме того, он широко используется для администрирования сетей, автоматического тестирования, создания приложений и даже 3D-анимации.
Ко всему прочему, Python считается лёгким в изучении: у него десятки тысяч подключаемых библиотек на все случаи жизни, глобальное сообщество разработчиков и нереальное количество учебных материалов.
Так что если вы решаете, с какого языка вам вкатиться в программирование с нуля, то Python — ваш кандидат! А в этом самоучителе расскажем, как освоить Python самостоятельно и бесплатно:

Как убедиться, что Python — отличный язык для старта в разработке? Простой алгоритм:
- Прочитайте нашу статью «Выбираем язык программирования: что нужно знать о Python». Мы сравнили детище Гвидо ван Россума с Java и JavaScript.
- Если этого мало — изучите увлекательную краткую историю Python.
- Стереотипы и сомнения всё не отпускают? Мы развеяли 10 главных мифов о Python.
- Теперь мы точно на одной волне: пора приобщиться к тайным знаниям и прочитать, какие ошибки совершают новички при изучении Python.
С чего начать обучение Python
Мы собрали для вас ссылки на обучающие материалы, которые накопились за годы работы Skillbox Media. Они бесплатны и разбиты по трём направлениям: основы, приложения, data science. Внутри каждого направления статьи отсортированы по возрастанию сложности: от простых до заковыристых.
Как вам выучить Python по нашим материалам:
- Читаете статьи.
- Смотрите видео.
- Повторяете за преподавателем или автором.
- Гуглите, если что-то совсем не получается.
- Вбиваете в Telegram слово «Python» и присоединяетесь к лучшим чатам, где опытные питонисты смогут ответить на любой ваш вопрос — если захотят, конечно.
Настало время добрых советов — часть из них могут показаться банальными, но они и правда работают!
Выделите на занятия 1–2 часа ежедневно, чтобы знания не успевали выветриваться (согласно кривой забывания), и постарайтесь продержаться в таком темпе три недели — говорят, за этот срок вырабатывается привычка.
Не бойтесь ошибок. Их будет много — и в процессе обучения, и когда вы станете настоящим программистом. Воспринимайте ошибки как повод впасть в депрессию узнать что-то новое. Цикл вашего обучения должен выглядеть приблизительно так:
- Проба.
- Ошибка.
- Google, чат или помощь друга.
- Исправление ошибки.
- GO TO п. 1.
- .
- Воскресенье PROFIT!
Только учтите: статьи и вебинары могут не отражать самые новые фишки языка. Что-то могло измениться: исчезли команды, обновились библиотеки, сервисы стали другими. Это не помешает учиться, но в каких-то мелочах придётся разобраться самостоятельно — и да, это часть ежедневной работы программиста.
Python: основы языка программирования для начинающих
С помощью нашего самоучителя Python вы изучите язык на базовом уровне: установка интерпретатора, синтаксис языка, импорт библиотек, основные типы данных и операции над ними. Кстати, этого вполне достаточно, чтобы создавать довольно сложные и полезные программы — и стать начинающим разработчиком.
Установка
Программировать на Python можно на своём компьютере, скачав и установив дистрибутив (рекомендуем пакет Anaconda или среду разработки PyCharm), либо в браузере с помощью специальных сервисов (например, Google Colab).
Базовый синтаксис
Путь питониста начинается с основных операторов, базового синтаксиса языка и установки библиотек. Чтобы изучить Python с нуля, советуем начать с этих материалов:
-
. Установим дистрибутив Anaconda, изучим синтаксис и нарисуем график курса доллара. . Когда с языком познакомились, пора узнать, что такое типы данных и какие они бывают в Python. . Нарисуем облако самых частотных слов со страницы «Википедии» прямо в браузере с помощью Google Colab. . Основные способы: ручная установка, с помощью easy install и самый популярный — c помощью утилиты PIP.
- Вебинар «Рисуем дерево с помощью Python». Изучим чуть больше команд и функций, разберёмся с циклами и условиями, импортируем библиотеку для рисования.
Списки
Списки — самый популярный тип данных, с которым вы будете работать большую часть своего времени, поэтому стоит узнать, что это такое. Начинающий Python-разработчик должен знать:
-
. Начинаем, конечно же, с основ и разбираемся, как устроены списки. . Узнаём о четырёх способах удаления элемента из списка. . Разбираемся, в чём различия двух методов добавления элементов в список. . Ещё полезно знать, как разные типы данных можно переделывать в другие — например, списки в строки. . Если на собеседовании вас начнут гонять по этому типу данных, вы не потеряетесь.
Строки
Постмодернисты говорили: мир как текст и текст как мир. Это особенно актуально в программировании — в том числе на Python. Поэтому важно уметь работать со строками.
-
. Разбираем удобный и наглядный способ вывода строк. . Их вечно приходится объединять, поэтому пора узнать самые эффективные методы. . Они полезны, когда вам нужно проанализировать и обработать строки.
Инструменты и фишки
Хороший программист — любопытный программист. Знание фишек и неочевидных нюансов языка — один из признаков хорошего программиста, даже начинающего.
-
. Одна из характерных фич Python — создание сложных объектов буквально в 1–2 строки. В этом помогут и генераторы. . Короткие и понятные программы позволяют лучше понять язык. . Инструменты, которые вы будете постоянно использовать в разработке. . Если вы хотите стать хардкорным разработчиком, то скорее учите Vim. Он круто выглядит, быстро работает и имеет кучу классных фишек.
Продвинутые возможности
Python снисходителен к новичкам — потому что позволяет решать какие-то задачи довольно небрежно, жертвуя чистотой кода в обмен на скорость разработки. Но это не значит, что правильного и красивого решения не существует.
-
. Да, можно просто объединять строки с помощью знака +, но это не лучший способ. . Функция, которая изменяет (декорирует) другую функцию. Звучит перспективно! . Случайностей не бывает, особенно в Python. Или… . Большая часть работы программиста — не написание нового кода, а чтение и переделка (рефакторинг) старого. Будем же делать это правильно! . Функции могут вызывать сами себя. Это называется «рекурсия». Разбираемся, как она работает и где бывает полезна.
Объектно-ориентированное программирование
Однажды вы увидите, что ваши программы становятся всё больше и больше, а их поддержка становится сложнее. Тогда вы задумаетесь, как это всё исправить. Ответ простой — используйте ООП.
-
. Наверное, самая важная тема из всех остальных. Вы узнаете, что такое объекты и классы, и научитесь писать лаконичный код. . Попробуйте закрепить знания и переписать код игры по принципам ООП. Уверены, что у вас получится.
Чтобы глубже изучить тему ООП, советуем также прочитать наши статьи о главных концепциях этой парадигмы:
-
. Базовые элементы всего ООП, от которых строится всё остальное. . Нюансы при работе с объектами. . Доступ к методам внутри объектов иногда нужно защищать, делается это с помощью инкапсуляции и модификаторов доступа. . Приём в объектно-ориентированном программировании, который позволяет определить несколько методов с одним и тем же названием. . Более подробно про перегрузку на концептуальном уровне. . Избавляемся от дубликатов кода и делаем проекты ещё лаконичнее. . Удаляемся от всех материальных вещей и думаем абстрактными идеями — или абстрактными классами и интерфейсами в случае ООП.

Python: пишем приложения
Лучшего способа обучения, чем многократное повторение за учителем, пока что не придумали. Повторяйте все действия за нашими преподавателями, и вы научитесь работать в PyCharm, взламывать пароли и создавать настоящие мессенджеры.
Можно проматывать и ускорять видео, пересматривать сложные места — записи именно для этого и сделаны.
Считаем калории и пишем голосового ассистента
Анастасия Борнева, ведущий исследователь данных в Сбербанке, демонстрирует процесс создания нескольких простых программ в PyCharm. Бонусом — советы по началу карьеры в Python.
«Нет неподходящего возраста, есть неправильно преподнесённое резюме».
Подбираем пароли и работаем с сетью
Никита Левашов, технический директор в Lia, учит основам хакинга на Python.
- В первый день вы вспомните основы Python и напишете простую программу — парсер паролей.
- Во второй день изучите работу с файлами и сетью, а также закодите утилиту для автоматического подбора паролей.
- На третьем, итоговом, занятии Никита разберёт домашние задания — можно будет сравнить со своими решениями.
Интенсив «Хакинг на Python»: день первый, день второй, день третий.
Создаём мессенджер с формами и интерфейсом
Алексей Коновалов, старший разработчик «ООО МТС-Диджитал», показывает, как написать мессенджер на Python.
- Традиционно первый день посвящён основам языка и написанию простой программы.
- Во второй день вы напишете ещё одну программу, сделаете формы регистрации пользователей и настроите отправку и получение сообщений.
- В третий день Алексей рассказывает о пользовательском интерфейсе и подводит итоги.
Интенсив «Мессенджер на Python за 3 дня»: день первый, день второй, день третий.
Парсим данные
Парсинг — это когда мы собираем данные с сайтов и потом что-то с ними делаем, например анализируем или создаём базу данных.
Пишем десктопное приложение
На Python можно и приложения с графическим интерфейсом писать. Делать это удобно, потому что:
- Python — простой и понятный язык;
- в Python есть много инструментов, которые ускорят разработку;
- вы всегда сможете найти ответ на свой вопрос.
Лучший способ написать десктопное приложение — с помощью библиотеки Tkinter.
Python для data science
Наверняка кто-то уже написал статью о причинах популярности Python среди дата-сайентистов. Эти причины нам, по правде сказать, не слишком важны, просто запомним, что на данный момент Python главный язык в науке о данных.
Если вы планируете карьеру в этом направлении, то в дополнение к основным вебинарам прочитайте статьи:

Первые модели
Одна из сильных сторон Python — это то, что настоящую модель машинного обучения можно закодить буквально в пару десятков строк, а то и меньше. И, разумеется, чтобы написать эти строки, глубокое знание Python не требуется.
Делаем умного чат-бота
Михаил Овчинников, директор по разработке в лондонской компании Noon Academy, научит вас делать умных чат-ботов.
- В первый день познакомимся с архитектурой будущего чат-бота, узнаем, что такое NLU, а также, как обычно, освежим в памяти основы Python.
- Во второй день научим чат-бота понимать текст. Для этого подготовим данные, превратим слова в числа, обучим модель и встроим её в чат-бота.
- На третий день создадим телеграм-бота и запустим наконец-то наше приложение. Восстание машин уже близко!
Интенсив «Чат-бот с искусственным интеллектом на Python»: Первый день, Второй день, Третий день.
Пишем зрячую нейросеть
Уже знакомый нам Никита Левашов покажет, как сделать приложение с нейронкой внутри.
- Первый день: основы Python для работы с нейросетью, работа в Google Colab, что такое компьютерное зрение.
- Второй день: обучение модели распознаванию объектов.
- Третий день: написание приложения, подключение его к стриму.
Интенсив «Пишем нейросеть для распознавания предметов и слежки»: первый день, второй день, третий день.
Что в итоге
Вдумчивое освоение указанных материалов даст вам достаточно навыков, чтобы претендовать на позиции стажёра или, если повезёт, даже джуниора, в зависимости от требований в конкретной компании.
Самое главное — не останавливаться. Путь программиста — это путь постоянного обучения, и Python-программисты не исключение. Эта статья — лишь начало вашего путешествия в огромный мир IT. Заметим, что совершенно необязательно входить в него в одиночестве.
С чего начать изучение Python и как написать на нем первый код

Python — самый популярный язык программирования по данным индекса TIOBE на октябрь 2022 года. Востребованность Python можно объяснить тем, что его применяют во многих сферах: веб-разработка (чаще всего серверная часть), машинное обучение и анализ больших данных.
Также на Python создают:
- Видеоигры
- Десктопные приложения
- 3D-графику
- Программ для обработки изображений, видео и аудио.
В сфере мобильной разработки язык Python используют очень редко.
Python — высокоуровневый язык с динамической типизацией. Это значит, что код на нем прост для чтения и понимания, а разработка быстрая, так как Python сам классифицирует вводимые данные.
Посмотрите, как можно вывести на экран фразу «Hello, World!» в одну строчку с помощью одной понятной команды:
И как это можно сделать с помощью языка Java:
Python также известен своей философией — правилами, которые разработчики стараются соблюдать при написании кода. Они сформулированы в списке из 19 пунктов под названием «The Zen of Python». Вот несколько правил из этого списка:
- Явное лучше, чем неявное
- Простое лучше, чем сложное
- Читаемость имеет значение.
У Python есть более сотни библиотек кода — наборов инструментов для решения программистских задач. Также есть много фреймворков: возможно, вы что-то слышали о Django, Pyramid или Flask. Каждый из этих инструментов можно освоить, чтобы выйти на новый уровень программирования на Python.
Python применяют для создания и поддержания своих продуктов такие компании, как Google, Yandex, Spotify, Microsoft, Pinterest, Quora, Intel и другие.
Станьте востребованным Python-разработчиком На Хекслете есть обучение по профессии Python-разработчика. Пройдите его, чтобы изучить Python и фреймворк Django, разобраться в алгоритмах и структурах данных, а также получить поддержку от менторов и единомышленников.
С чего начать изучение языка Python
Определитесь с целью
Изучать любой язык программирования с нуля легче, когда вы понимаете, где применять полученные знания. От вашего выбора также зависит стек технологий, который вы будете использовать в будущем.

Разберитесь в синтаксисе языка
Синтаксис — это набор правил, по которым разработчики пишут код на любом языке программирования. Основа, без которой невозможно программировать.
Многие хотят начинать изучение программирования с Python, потому что у этого языка достаточно простой синтаксис. Код на нем можно понять без особых знаний за счет лаконичности языковых конструкций.
Вот примерный список тем, которые нужно изучить и понять перед тем, как начать кодить на Python:
- Строки — как их выводить, извлекать из них символы
- Переменные и типы — для чего они нужны, как облегчают разработку
- Операторы — какие они бывают в Python и как работают
- Условия — что такое условные конструкции и как их задавать
- Циклы — для чего нужны и как использовать
- Структуры данных — для чего используют, сколько всего структур и какие они бывают
- Функции — в чем особенность, как их вызывать и где искать документацию по ним
- Классы и объекты — что это такое и как они обозначаются.
Изучить основы языка вам поможет бесплатный курс «Python для начинающих» на проекте Codebasics. Обучение там начинается с азов, информация структурирована и подается от простого к сложному.
Читайте также: Программирование на Python: особенности обучения, перспективы, ситуация на рынке труда
Ознакомьтесь с документацией
Документация дает представление о работе языка и показывает примеры его использования. Это как огромная библиотека или справочная, в которую разработчик может прийти за нужным документом или ответом в спорных ситуациях. Документацию Python можно посмотреть на официальном сайте.
Как начать программировать на Python
Установите среду разработки
После того, как вы изучите синтаксис, попробуйте написать первый код. Это можно сделать в интегрированной среде разработки — IDE, которая включает в себя редактор кода, инструменты для его выполнения и отладки, а также систему контроля версий.
Среда разработки помогает разработчику ориентироваться в коде и искать в нем ошибки. Самые популярные IDE для Python: Python IDLE, PyCharm, Spyder, Thonny.
Еще можно установить редактор кода — это более легковесная программа, аналог текстовых редакторов. Она сохраняет проекты в правильном расширении, автоматически проверяет отступы в коде и подсвечивает синтаксис. Самые популярные редакторы кода для Python: Visual Studio Code, Sublime Text, Vim.
Также существует онлайн-IDE, с помощью которой можно писать код на Python прямо в браузере. Replit подойдет для первого знакомства с Python и создания небольших проектов.
Решайте задачи
Существует много разных сайтов, на которых питонисты выкладывают и решают задачи по Python. Это, например:
Платформа Kaggle подойдет для тех, кто выбрал для дальнейшего развития сферу машинного обучения. На ней проходят групповые соревнования, где организаторы дают разные задачи по Data Science. Участники решают задачи с помощью языка Python. Лучшие решения можно будет положить в портфолио.
Участвуйте в играх
Изучать Python по играм не менее эффективно, чем штудировать теорию курсов и учебников. На игровых турнирах можно прокачиваться в написании кода и даже знакомиться с единомышленниками.
В какие игры можно поиграть:
-
— пожалуй, самая популярная игра по Python. В ней нужно помогать обезьянке собирать бананы с помощью цепочки команд. — игра учит базовым навыкам программирования и написанию кода. В ней нужно захватывать земли и уничтожать врагов. — это платформа, на которой проходят игры и турниры для разработчиков. Они развивают алгоритмическое мышление и дают полезные связи с разработчиками. Хекслет проводит соревнования разработчиков разных уровней на Codebattle каждый месяц — участвуйте, чтобы приобрести новый опыт и разнообразить свое обучение.
Сколько времени нужно, чтобы выучить Python
Судя по опыту многих разработчиков, базовые знания по Python можно получить чуть меньше, чем за месяц, если заниматься до пяти часов в неделю.
Если вы хотите стать Python-разработчиком, то готовьтесь уделять учебе от десяти часов в неделю. Занимаясь такое количество времени, вы сможете освоить Python на уровне джуна примерно в течение года.
Основы языка можно выучить самостоятельно с помощью книг, видеолекций и онлайн-курсов. Но на более поздних этапах обучения рекомендуем вам обращаться по всем вопросам к опытным разработчикам или менторам.
Читайте также: Как я 10 лет проектировал мосты, а в 33 года стал Python-разработчиком в банке
Полезные материалы для изучения Python
Есть много хороших книг по изучению Python. Будет здорово, если вы прочитаете некоторые из них:
- Пол Бэрри «Изучаем программирование на Python»
- Марк Лутц «Изучаем Python»
- Эрик Мэтиз. Изучаем Python. Программирование игр, визуализация данных, веб-приложения».
Также у Хекслета есть свой список рекомендованной литературы. Ознакомьтесь с этими книгами — они полезны для программистов любых направлений.
На YouTube-канале Хекслета есть рубрика «Публичные собеседования», в которой наши студенты проходят учебные интервью у специалистов разных компаний. Посмотрите видео из этой рубрики, чтобы иметь понимание о том, как проходят собеседования и какие знания нужны разработчикам, чтобы успешно их проходить.
Если в процессе обучения вы почувствуете, что вам не хватает поддержки единомышленников и более опытных разработчиков, присоединяйтесь к Хекслет Комьюнити. Там вы сможете обсуждать трудные моменты в учебе, получать помощь и поддержку.
Станьте востребованным Python-разработчиком На Хекслете есть обучение по профессии Python-разработчика. Пройдите его, чтобы изучить Python и фреймворк Django, разобраться в алгоритмах и структурах данных, а также получить поддержку от менторов и единомышленников.
Изучите основы Python на Хекслете Запишитесь на подготовительный курс, чтобы изучить основы языка и попробовать программирование на практике.
Изучаем Python за 6 месяцев. Подробный план обучения

Простой и красивый синтаксис, множество библиотек под самые разные задачи и большое комьюнити делают Python одним из самых популярных языков программирования на сегодняшний день, который активно используется в data science и машинном обучении, веб-разработке и других областях программирования.
Когда я начал изучать питон, у меня возникло несколько вопросов:
какие темы необходимо изучить;
насколько это будет сложно;
сколько это займёт времени;
где найти хорошие источники информации?
Вкратце, на мой взгляд, необходимо знать следующие темы:
стандартные типы данных;
работа с файлами;
объектно-ориентированное программирование (ООП);
полезные библиотеки типа itertools, collections и тому подобное.
Если вы прежде не занимались программированием, то поначалу будет сложновато, но потом мозги «настроятся» в нужное русло и будет нормально.
На этом преамбула окончена и переходим непосредственно к плану обучения.
Основы (3 месяца)
Предлагаю начать с прочтения книги Билла Любановича «Простой Python. Современный стиль программирования» (второе издание) чтобы иметь базовое представление о том, что такое программирование и как выглядит код на Python.

Далее переходим к курсам на платформе Stepik:
Очень хорошие курсы с морем задач, которые вас познакомят с основными типами данных, условиями, циклами, функциями и работой с файлами.
После следует приступить к плейлисту декораторы канала luchanos и для практики пройти на Stepik «Декораторы в Python»: часть 1 и часть 2.
Ещё по желанию можно пройти регулярные выражения: курс, учебник и практика.
Введение в алгоритмы (2 недели)
Вообще, о том, как шатать leetcode и проходить алгоритмические фиды на собесах – дело отдельной статьи, поэтому пока обойдёмся основами основ и здесь на сцену вступает небезызвестная книга Адитьи Бхаргавы «Грокаем алгоритмы».

Автору удалось сделать очень дружелюбное к новичкам пособие, из которого вы узнаете про алгоритмы поиска и сортировки, что такое рекурсия, динамическое программирование и многое другое – однозначно рекомендасьон.
Объектно-ориентированное программирование (3 недели)
Есть 2 хороших курса:
плейлист Python OOP канала JimShapedCoding;
курс Python ООП Олега Молчанова – лучшее объяснение из всех, что я видел.
Отсюда вы узнаете об устройстве объектной модели в Python, какие существуют парадигмы ООП, для чего применяются дескрипторы и многое другое.
Также параллельно с курсами было бы хорошо углубляться в пройденные темы и для этого есть неплохая книга «Object-oriented Python», Irv Kalb.

В отличие от курсов, в ней также уделяется внимание магическим методам и некоторым другим аспектам. Писать игры необязательно, как это делается в книге, но ознакомиться с ней стоит. В конце переходим к SOLID и по желанию к паттернам (плейлист и сайт).
Для практики переходим на codewars OOP: когда получится решать 5 кату, то можно двигаться дальше.
Конкурентность (2 недели и больше)
Для обеспечения быстрой и эффективной работы приложений, а также для обработки большого количества данных необходимо уметь пользоваться вычислительными ресурсами максимально эффективно, поэтому знания об основах конкурентности даже на начальном этапе будут большим преимуществом.
Основы многопроцессорности и многопоточности:
По асинхронному программированию есть 2 хороших плейлиста:
Параллельно с курсами лучше пользоваться книгой Мэттью Флауэра «Asyncio и конкурентное программирование на Python».

Отсюда вы узнаете о выполнении конкурентных запросов к базам данных, сочетании многопоточной обработки с asyncio, управлении подпроцессами и многом другом.
Тестирование кода (1 неделя)
Чтобы удостовериться в том, что написанный вами код выполняет именно тот функционал, который вы от него ожидаете, его необходимо уметь покрывать тестами хотя бы на базовом уровне.
Поэтому предлагаю перейти к плейлисту Pytest тестирование канала luchanos.
Ещё есть неплохая книга «Python Testing with pytest» (second edition), Brian Okken, с которой также желательно ознакомиться.

В качестве альтернативы Pytest есть неплохой плейлист Unittest in python канала Paris Nakita Kejser и книга Владимира Хорикова «Принципы юнит-тестирования» (примеры кода на C#).

Больше продвинутых тем (3 недели)
В принципе, может показаться, что всего вышеперечисленного уже достаточно, но для лучшего понимания устройства функций и классов, как работает сборщик мусора, в чем отличие итераторов от генераторов, как пользоваться библиотеками типа itertools, collections и т.д., ещё необходимо немного углубиться, и в этом нам помогут 2 книги:
«Python – к вершинам мастерства» (второе издание), Лусиану Рамальо.
«Dead simple Python», Jason C. Mcdonald.
Книги плюс-минус об одном и том же, однако в последней некоторые темы рассматриваются на немного более поверхностном уровне. За счёт этого она читается легче.
Какую из них выбрать? Лучше читать наиболее непонятные темы из обеих книг.
Best practices (1 неделя и больше)
После того, как вы изучите основные конструкции и возможности языка, не будет лишним и узнать об их эффективном использовании, и для этой цели есть хорошая книга «Effective Python. 90 specific ways to write better Python» (second edition), Brett Slatkin.

Солянка из лучших практик, показывающая как сделать код более лаконичным и эффективным с «питоновской» точки зрения.
Что в итоге
Занимаясь по 10 часов в день, на изучение всех вышеперечисленных тем уйдёт около полугода – это цифры из собственного опыта, так что можно их брать в качестве начального ориентира, однако, возможно, у вас будут другие результаты.
Что дальше
Дальше можно смело двигаться в выбранное вами направление: будь то веб-разработка с Django и Flask или же машинное обучение с Numpy, Pandas и Pytorch – полученных знаний хватит за глаза.
Дополнительные источники
«Знакомство с Python», Дэн Бейдер;
«Изучаем Python» (третье издание), Эрик Мэтиз;
«Изучаем Python» (пятое издание, 2 тома), Марк Лутц;
«Python Workout: 50 ten-minute exercises», Reuven M. Lerner;
«Изучаем программирование на Python» (второе издание), Пол Бэрри;
«Начинаем программировать на Python» (пятое издание), Тони Гэддис;
«Автоматизация рутинных задач с помощью Python» (второе издание), Эл Свейгарт;
Питонтьютор – небольшой курс по Python;
Python tutorials – ещё один неплохой курс по питону;
Python for Everybody – курс от университета Мичигана;
Изучаем Python – курс для начинающих от freeCodeCamp;
Добрый, добрый Python – обучающий курс от Сергея Балакирева;
Программирование на Python – курс начального уровня от института биоинформатики.
«Секреты Python Pro», Дейн Хиллард;
«Using Asyncio in Python», Caleb Hattingh;
«Beyond the Basic Stuff with Python», Al Sweigart;
«Python. Книга рецептов», Дэвид Бизли, Брайан К. Джонс;
«Профессиональная разработка на Python», Мэттью Уилкс;
«Паттерны разработки на Python», Гарри Персиваль, Боб Грегори;
«Чистый Python. Тонкости программирования для профи», Дэн Бейдер;
«Python Object-Oriented Programming» (fourth edition), Steven F. Lott, Dusty Phillips;
Intermediate Python – продолжение начального курса от freeCodeCamp;
Python: основы и применение – курс среднего уровня от института биоинформатики;
Программирование на Python – более продвинутый курс от Computer Science Center;
Параллельное программирование – ещё один видеокурс от Computer Science Center.
Ещё несколько полезных ссылок:
Real Python – куча статей по Python;
PEP 8 – руководство по стилю кода на Python;
The Elements of Python Style – ещё одно руководство по стилю кода;
Stack Overflow – известный сервис вопросов и ответов по программированию;
Изучение Python: от нуля до мастера
![]()
Первым делом спросим себя, что такое Python? Создатель языка, Гвидо ван Россум, описывает его следующим образом:
“Язык программирования высокого уровня, главная идея которого — это простая читабельность и синтаксис, который позволяет программистам выражать концепцию программы парой строк кода”
Лично для меня, первой причиной изучать Python было то, что это очень красивый язык программирования, выражать мысли в котором просто и естественно.
Следующей причиной было то, что Python мультизадачный. Мы можем его использовать для анализирования данных, разработки сайтов, машинного обучения. Quora, Pinterest и Spotify используют именно Python для своего back-end’а. Хорошая мотивация, чтобы узнать чуть больше об этом.
Основы
1. Переменные
Вы можете думать о переменных, как о словах, что держат в себе какое-то значение. Очень просто.
В Python нет ничего проще, чем определить переменную и присвоить ей какое-то значение. Представьте, что мы ходим сохранить число 1 в переменной, которую назовём “one”. Это будет выглядеть следующим образом
Что может быть проще? И при этом вы только что присвоили значение 1 для переменной “one”.
И таким образом вы можете присвоить любое значение любой переменной. И как видно в примере кода повыше, переменная “two” хранит числовое значение 2, а переменная “some_number” хранит значение 10,000.
Помимо числовых значений, мы также можем использовать логические (true/false, в переводе истинно/ложно), строки, десятичные числа и много других типов.
2. Контролирование потока: условные состояния
Ключевое слово “if” используется для ситуаций, когда нам нужно выполнить разные действия при положительных или отрицательных условиях. При значении “истинно” будет выполняться описанный после слова “if” блок, например:
2 больше, чем 1, поэтому выполняется “print”-команда.
Блок “else” выполнится при условии, если условие “if” ложно.
Так как 1 не больше 2, то выполняется в блоке “else”.
Также можно использовать “elif” условие:
3. Циклы / итерации
В Python, можно создавать циклы различными способами. Мы расскажем о двух: while и for.
Цикл While: до тех пор, пока условие истинно, код внутри цикла будет выполняться. Таким образом, следующий код напишет числа от 1 до 10.
Циклу while нужно “условие повтора”. Если оно остаётся истинным, итерации продолжаются. В приведённом примере, когда значение num становится 11, условие цикла становится ложным.
Ещё один небольшой пример, чтобы лучше понять цикл while:
Условие цикла(loop condition) установлено в True, поэтому цикл будет выполняться до тех пор, пока мы не переключим его в значение False.
Цикл for: в цилке for мы назначаем переменную “num” для самого цикла, который в свою очередь будет увеличивать значение этой переменной. Следующий код напишет числа от 1 до 10 точно так же, как и цикл while:
Видите? Очень просто. Цикл начинается с 1 и продолжается до 11 элемента.
Списки: коллекция, массив, структура данных
Представьте что вы хотите сохранить значение 1 в переменной. или может теперь вы хотите сохранить 2. А ещё 3, 4, 5…
Есть ли иной способ хранить все числа, что нам нужны, не имея при этом, не создавая при этом миллионы переменных? Как оказывается, есть иной способ хранить их всех.
Список(массив) это коллекция, которая может быть использована для хранения нескольких значений(в нашем случае чисел). Используется он следующим образом:
Это действительно просто. Мы создали список и сохранили его в my_integers.
Но затем мы спросим себя: “А как нам получить нужное значение из списка?”.
Хороший вопрос. В списках есть концепция, которая зовётся номером(индексом). Номером первого элемента в списке является 0, следующий получает 1 и так далее.
Чтобы донести это проще, мы можем представить список, у которого каждый элемент подписан своим номером. Как на следующей картинке:
Используя синтаксис Python не сложно понять и следующее:
Представьте, что мы больше не хотим хранить числа. Вместо этого мы хотим составить список имён наших знакомых. Мой выглядел бы следующим образом:
Это работает точно так же, как и с числами. Неплохо.
Только что мы выучили, как работают индексы в списках. Но мне всё ещё нужно показать вам, как добавить новый элемент в список.
Самая простая функция, которую можно использовать для этого — зовётся append. Работает она следующим образом:
Функция append донельзя проста. Вам всего лишь нужно использовать новый элемент(в примере выше это “The Effective Engineer”) как значение это функции.
Ну что же, достаточно о списках. Перейдём к следующей структуре данных.
Словарь: структура данных в виде ключ-значение
Теперь мы знаем, что списки пронумерованы числовыми значениями. Но что, если мы не хотим использовать числа для идентификации элемента? Некоторые виды структур данных могут использовать числа, строки, или другие виды идентификации.
Одним из таких типов является словарь. Словарь это коллекция пар ключ-значение. Вот так это выглядит:
Ключ указывает на значение. Чтобы получить доступ к какому-либо значению — нам нужно обратиться к его ключу. Делается это следующим образом:
Я создал словарь о себе. Моё имя, никнейм и национальность. Эти атрибуты ключи в словаре.
Похожим образом на то, как мы получаем элемент из списка по его номеру, точно так же мы получаем значения словарей по их ключам.
В примере я написал предложение о себе используя значения, которые хранятся в словаре. Довольно просто, не правда ли?
Ещё одной хорошей особенностью словарей является то, что мы можем использовать что угодно в качестве значения. В том словаре, что я создал, я хочу добавить новый ключ “age”(возраст) и числом мой реальный возраст в качестве значения:
Здесь у нас пара из ключа(age) и значения(24). При этом ключ это строка, а значение это число.
Точно также как со списками, давайте научимся добавлять новый элемент в словарь. Ключ указывающий на значение — главная особенность словаря. И это же одна из особенностей при добавлении нового элемента в словарь:
Нам просто нужно дописать значение для существующего ключа в словаре. Ничего сложного, не так ли?
Итерации: циклы для структур данных
Как описывалось выше — итерации в списках довольно просты. Обычно Python-разработчики используют цикл for. Давайте посмотрим как это выглядит:
Таким образом, за каждую книгу на книжной полке(bookshelf) мы вызываем функцию print. Достаточно просто и интуитивно. Это Python.
Для хэш-структуры данных мы используем тот же цикл for, но в качестве счётчика выступает key:
Это пример того как мы используем этот цикл. За каждый ключ в словаре, мы используем print для вывода ключа и его значения.
Также есть другой способ сделать это используя функцию iteritems.
Мы назвали наши параметры как key и value, но в этом нет необходимости. Мы можем назвать их как угодно. Давайте проверим это:
В данном примере мы использовали attribute, как параметр для ключей словаря. Как видим, всё работает корректно. Отлично!
Классы и объекты
Немного теории:
Объекты это представление предметов из реальной жизни, например машин, собак, велосипедов. У объектов есть две основных характеристики: данные и поведение.
У машин есть данные, например количество колёс или сидячих мест. Также у них есть поведение: они могут разгоняться, останавливаться, показывать оставшееся количество топлива и другое.
В объектно-ориентированном программировании мы идентифицируем данные как атрибуты, а поведение как методы. Ещё раз:
Данные → Атрибуты; Поведение → Методы
Класс это как чертёж, из которого создаются уникальные объекты. В реальном мире есть множество объектов с похожими характеристиками. Например, машины. Все они имеют какую-то марку или модель(точно так же как и двигатель, колёса, двери и так далее). Каждая машина была построена из похожего набора чертежей и деталей.
Активировать объектно-ориентированный режим Python
Python, как объектно-ориентированный язык программирования, имеет следующие концепции: классы и объекты.
Класс — это чертёж, модель для его объектов.
Ещё раз, класс — это просто модель, или способ для определения атрибутов и поведения(о которых мы говорили в теории выше). Например, класс машины будет иметь свои собственные атрибуты, которые определяют какие объекты являются машинами. Количество колёс, тип топлива, количество сидячих мест и максимальная скорость — всё это является атрибутами машин.
Держа это в уме, давайте посмотрим на синтаксис Python для классов:
Мы определяем классы class-блоком и на этом всё. Легко, не так ли?
Объекты это экземпляры классов. Мы создаём экземпляр тогда, когда даём классу имя.
Здесь car это объект(экземпляр) класса Vehicle.
Помните, что наш класс машин имеет следующие атрибуты: количество колёс, тип топлива, количество сидячих мест и максимальная скорость. Мы задаём все атрибуты когда создаём объект машины. В коде ниже, мы описываем наш класс таким образом, чтобы он принимал данные в тот момент, когда его инициализируют:
Мы используем метод init. Мы называем этот конструктор-методом. Таким образом, когда мы создаём объект машины, мы можем ещё и определить его атрибуты. Представьте, что нам нравится модель Tesla S и мы хотим создать её как наш объект. У неё есть четыре колеса, она работает на электрической энергии, есть пять сидячих мест и максимальная скорость составляет 250 км/ч. Давайте создадим такой объект:
Четыре колеса + электрический “вид топлива” + пять сидений + 250 км/ч как максимальная скорость.
Все атрибуты заданы. Но как нам теперь получить доступ к значениям этих атрибутов? Мы посылаем объекту сообщению с запросом атрибутов. Мы называем это метод. Это поведение объекта. Давайте воплотим эту идею:
Это реализация двух методов: number_of_wheels и set_number_of_wheels. Мы называем их получатель и установщик. Потому что получатель принимает значение атрибута, а установщик задаёт ему новое значение.
В Python мы можем реализовать это используя @property для описания получателя и установщика. Посмотрим на это в коде:
Далее мы можем использовать методы как атрибуты:
Это немного отличается от описания методов. Эти методы работают как атрибуты. Например, когда мы задаём количество колёс, то не применяем два как параметр, а устанавливаем значение двойки для number_of_wheels. Это один из способ написать получать и установщик в Python.
Ещё мы можем использовать методы для других вещей, например создать метод “make_noise”(пошуметь).
Когда мы вызовем этот метод, он просто вернётся строку “VRRRRUUUUM”.
Инкапсуляция: сокрытие информации
Инкапсуляция — это механизм, который ограничивает свободный доступ к данным и методам объекта. Но в то же время, это упрощает доступ к данным(методам объекта).
“Инкапсуляция может использоваться для сокрытия данных и функций. Под определением инкапсуляции имеется ввиду то, что внутреннее представление объекта сокрыто от просмотра вне определения объекта.” — Википедия
Вся внутренняя реализация объекта недоступна извне. Только сам объект может взаимодействовать со своими внутренними данными.
Для начала нам нужно понять как работают публичные и не-публичные переменные и методы.
Публичные экземпляры данных
Для Python-класса мы можем инициализировать публичный экземпляр переменной внутри нашего конструктор-метода. Давайте посмотрим:
Здесь мы применяем значение first_name как аргумент для публичного экземпляра переменной.
Здесь нам не нужно применять first_name как аргумент, а все экземпляры объектов будут иметь заранее прописанный атрибут класса. В нашем случае first_name будет заполнено строкой “ТК.
Круто. Теперь мы узнали как можно использовать публичные экземпляры переменных и атрибуты класса. Ещё одна интересная особенность публичных данных в том, что мы можем управлять значениями переменных. Что я имею в виду под этим? Наш объект может управлять значением переменной: получать и устанавливать значения переменной.
Помня о классе person зададим значение для переменной first_name
Вот и всё. Мы просто задали другое значение(kaio) экземпляру переменной first_name и оно обновилось. И всё на этом. Поскольку это публичная переменная, то мы можем делать это так.
Не-публичные экземпляры данных
Мы не используем термин “приватный”, поскольку в Python нет действительно приватных атрибутов(если только не задаваться тяжёлой целью создать их). — PEP 8
Точно так же, как с публичными экземплярами переменных, мы можем объявить и не-публичные экземпляры. Оба внутри конструктор-метода или внутри класса. Синтаксис несколько отличается: не-публичные экземпляры переменных должны начинаться с нижнего подчёркивания(“_”) перед именем переменной.
“‘Приватный’ экземпляр данных, доступ к которому открыт только изнутри, не существует в Python. Тем не менее, есть условность, которая выполняется в большей части Python-кода: имена с префиксом “_”(например, “_spam”) должны обрабатываться как не-публичные части API(будь то функция, метод или какие-то данные)” — Python Software Foundation
Увидели переменную email? Вот так мы описываем не-публичную переменную:
Мы имеем доступ и может обновить это. Не-публичные переменные это условность, при которой эти переменные обрабатываются как не-публичная часть API.
Таким образом мы создаём метод, который позволяет нам вносить изменения внутри определения класса. Давайте реализуем два метода(email и update_email), чтобы понять это:
Теперь мы имеем доступ и можем обновить значения не-публичных переменных используя эти методы. Посмотрим:
- Мы объявили новый объект, в котором first_name заполнено строкой “ТК” и email заполнено строкой “tk@mail.com”
- Выводим email получая доступ к не-публичной переменной через метод
- Пробуем задать новый email извне нашего класса
- Нам нужно обращаться в не-публичной переменной как к не-публичной части API
- Обновляем нашу не-публичную переменную с нашим методом экземпляра
- Успех! Мы можем обновить это внутри нашего метода с помощью метода-помощника
Публичные методы
Публичные методы мы тоже можем использовать вне класса:
Давайте протестируем это:
Прекрасно. Мы можем использовать это без каких-либо проблем.
Не-публичные методы
Но не-публичные методы мы не можем использовать так просто. Давайте реализуем тот же класс Person, но теперь метод show_age станет не-публичным с нижним подчёркиванием.
А теперь попробуем вызвать этот не-публичный метод с помощью нашего объекта:
У нас есть доступ и мы можем обновить это. Не-публичные методы это просто условность, при которых они обрабатываются как не-публичная часть API.
Здесь пример того, как мы можем использовать это:
Здесь у нас есть не-публичный метод _get_age и публичный метод show_age. show_age может использоваться нашим объектом(вне класса), в то время как _get_age используется только внутри определения нашего класса(внутри метода show_age). Но опять же, в виду условностей.
Вывод об инкапсуляции
С помощью инкапсуляции мы можем убедиться, что наша внутренняя реализация объекта сокрыта от внешних манипуляций.
Наследование: поведение и характеристики
Разные объекты могут иметь некоторую схожесть, обладать поведением и характеристиками.
Например, я унаследовал какие-то характеристики и поведение от своего отца. Я получил его глаза и волосы в качестве своих характеристик, а его нетерпеливость и интровертность в качестве своего поведения.
В объектно-ориентированном программировании классы могут наследовать простые характеристики(данные) и поведение(методы) от других классов.
Давайте посмотрим другой пример и реализуем его в Python.
Представьте машину. Количество колёс, сидячих мест и максимальная скорость — всё это атрибуты машины. Мы можем сказать, что класс электромашины наследует эти схожие характеристики от обычного класса машины.
Наш класс машины реализует:
Один раз реализовав, мы можем использовать все созданные экземпляры переменных. Неплохо.
В Python, мы применяем класс-родитель к нашему классу-наследнику как параметр. Класс электромашины может наследоваться от класса машины.
Вот так просто. Нам не нужно реализовывать какой-либо другой метод, потому что этот класс уже имеет его(унаследовав от класса машины). Давайте докажем это: