практика для новичков в python

Несколько полезных советов как практиковаться в Python

Привет, Хабр! Сегодня я предлагаю Вам перевод статьи Duomly, посвящённой изучению и практике программирования на языке Python.

Введение

Изучение Python не сильно отличается от изучения других языков программирования. Один путь для становления профессионалом в Python (или в другом любом языке) в основном зависит от имеющегося опыта и знаний. Это означает, что опытные программисты уже знакомы с основными концепциями программирования, обычные используют разные методы решения задач, когда как новички — нет.

Не смотря ни на что, имеется несколько вещей общих для всех, одна из них — Вам нужно практиковаться, очень много практиковаться!

К счастью, Python имеет широкое, дружелюбное и сообщённое друг с другом сообщество. Это Open-Source проекты которые действительно помогают в разработке.

Имеется много хороших советов о том, как практиковаться Python`у. Эта статья затронет всего 10 из них:

Выберете подходящее окружение

Для начала Вам следует использовать обычный Python 3 и пакетный менеджер, на операционной системе которую Вы используете. Windows, Mac OS, или любой дистрибутив Linux подойдёт для этого. (Даже Android с QPython, хотя возможности ограничены по сравнению с оригинальным Python). Позже Вы можете установить Anaconda на Windows, Mac OS или Linux. Он содержит интерпретатор Python, пакет Conda, зависимости и пакетный менеджер. С помощью него Вы сможете найти много сторонних библиотек которые могут показаться Вам полезными.

Вы должны выбрать нужную IDE (интегрированная среда разработка). Большинство популярных IDE, таких как Visual Studio, VSCode, Emacs, Vim, Sublime Text и др. имеют действительно хорошую поддержку для Python. Если Вам нравятся продукты от JetBrains, Вы можете попробовать использовать PyCharm.
Также в пакет дистрибуции Anaconda включён IDE под названием Spyder.

IPython и Jupyter Notebook хорошие инструменты которые предлагают удобную интерактивную функциональность. Также, имеется интерактивный интерпретатор Python, но Вы можете найти его более полезным для проверки простых кусочков кода, чем написания больших программ.

Также Вы можете посмотреть эту статью чтобы узнать больше о IDE для Python.
Помимо всего прочего, хорошей идеей будет установить и настроить линтеры для Python (Pylint, flake8 и прочие). Они являются маленькими пакетами которые просто подсвечивают проблемы Вашего кода (синтаксические, или связанные с несоблюдением стиля программирования на Python — PEP8).

Удостоверьтесь, что Вы имеете достаточную базу для изучения более сложных вещей

Если Вы хотите обучаться любому языку программирования, Вам нужно изучить хорошо изучить основы, поверх которых Вы будете строить Вашу карьеру в этом языке. Это означает, что Вам нужно по крайней мере знать: основной синтаксис языка, понимать основные концепты программирования, быть знакомыми со стандартными типами и структурами данных и так далее.

Вам следует найти нужную книгу для Вашего уровня о Python.
Duomly предлагает туториал по Python, который Вы можете использовать для изучения этих концептов и даже большего.
Также Вы можете начать с туториала на официальном сайте.

Пишите и улучшайте код

Написание большого количества кода для себя, является неотъемлимой частью изучения языков программирования.
Начните с кода из книг и туториалов. Затем попробуйте модифицировать его, например упростить, или более подходящим для каких-либо целей. После этого, попробуйте написать свои маленькие, но полезные программы.
Но главное, запомните одну из самых важных вещей о программирования: оно не о набирании кода, оно о понимании!

Вы будете делать ошибки. Все программисты их делают. И это вообще не плохо. Самое важное в этом — узнать, что пошло не так и конечно же, не повторять эти ошибки в будущем. Каждый раз, когда Вы получаете и исправляете ошибку, Вы становитесь немного лучшим программистом, чем Вы были раньше.
Иногда, важно вернуться назад к старому коду и попробовать улучшить его. Надеюсь, Вы увидете где Вы стали более лучше чем тогда, когда писали этот код.

Подумайте о проблемах, которые Вы хотели бы решить. В идеале, это те вопросы, которыми Вы увлечены. Эмоциональное вложение обычно улучшает результаты. Начните Ваши маленькие и средние проекты и пробуйте работать над их улучшением как можно чаще. Как только Вы изучите что-то новое, спросите себя, как Вы можете применить это к проблеме, которую вы хотите решить.

Читайте документацию

Документация очень важна в Python. Вам следует сделать привычкой читать её часто. Идеально будет, перед тем как использовать какую-либо существующую функцию, или метод, прочитать документацию о ней.

Документация может содержать больше деталей в некоторых моментах.

Вы можете изучить много нового из документации. Вы можете увидеть как использовать функцию, метод или класс, какие аргументы нужно передавать, что вернёт вызов функции, и так далее. Она также часто содержит связанные примеры, которые могут быть более информативны, а иногда поучительны.

Изучайте более сложные вещи после основ

Однажды, когда Вы будете понимать основы, Вы сможете начать изучать более сложные вещи. Не беспокойтесь, Вы не забудете основы. Они понадобятся Вам всегда.

Такие темы как обработка исключений, распаковка и упаковка аргументов, *args и **kwargs, декораторы, модули и пакеты, ООП и генераторы, часто используются и Вы должны знать и понимать их на хорошем уровне.
Также имеется много продвинутых тем которые нужно изучить. Например магические методы, корутины, асинхронное программирование, многопоточность, мультипроцессность, тестирование и так далее. Это не то, что понадобится Вам в начале. Так, Вы можете начать с чего-то более простого и полезного. Например, Вам нужно мощное средство для манипуляции со строками, Вы можете попробовать регулярные выражение. Если вы работаете над научным проектом, вероятно, Вы найдёте многопроцессность интересной для Вас.

Следите за стандартами, советами и трюками в языке Python

Имеется много специфичных вещей в программировании конкретно для языка Python, которые являются не самой простой задачей для изучения. Повезло, что есть много ресурсов, которые охватывают многие из этих тем.

Официальная документация Python содержит много информации. PEP 20, так же названый Дзеном Python, написанный Тимом Петерсом, обозначает главные принципы Python:

PEP 8, или руководство по написанию кода от Гвидо Ван Россума, B. Warsaw.
Также PEP 257, который обозначает соглашения для строк документации.

Анализируйте исходный код

Python — open-source`ный язык программирования, также как большинство популярных билиотек. Это значит, что Вы можете читать исходный код. Это часто возможно на Github, но есть и другие места где Вы можете это сделать.
Чтение и понимание кода библиотеки позволяет более лучше понимать, как она работает.

В дополнение, Вы можете изучать многое анализируя исходный код других (надеюсь хороших) программистов. Вы можете заимствовать идеи, смотреть на разные пути реализации, изучать новые паттерны, и так далее.

Интересуйтесь библиотеками

Python имеет множество полезных библиотек для разных задач:
регулярные выражения, математика, статистика, генерация случайных чисел, тестирование, итерирование, функциональное программирование, многопоточность и многопроцессность, абстрактные классы и многое другое.

Также имеются некоторые действительно полезные сторонние библиотеки для множества разных научных задач.
Очевидно, Вы не можете изучить как использовать их все, но Вы можете сфокусироваться на нескольких из них, которые кажутся Вам более интересными для Вашей специализации.

Если Вы хотите быть дата сайентистом или заниматься Machine Learning, Вам нужно начать с NumPy, который является основопологающей библиотекой, для манипуляции одно- и много-мерными массивами эффективным и простым путём. Он быстр и включает множество операций с массивами, без явного написания циклов for из Python.

Все эти библиотеки имеют превосходную документацию.

Если Вы хотите заниматься web-программированием, Вы можете изучить и попрактиковаться работать с некоторыми Python фреймворками для бэкенда. Самый популярный из них — Django, имеет большинство нужных возможностей. Это очень удобно для больших веб приложений. С другой стороны — Flask — мощный, гибкий микро-фреймворк с большим количеством дополнений. Django и Flask самые популярные Python веб-фреймворки.

Также Python имеет другие веб-фреймворки, например Pyramid, Bottle, Tornado и так далее.

SQLAlchemy — это пакет которые включает возможность работы с БД в объекто ориентированном стиле. Он часто используется в веб-фреймворках, но также в Data Science.

Станьте частью сообщества

Как уже было сказано, Python имеет большое и дружное сообщество. Вы можете стать его частью. Читайте публикации, комментируйте, спрашивайте, ищите объяснения.

Когда Вы будете иметь достаточный уровень знаний, Вы сможете начать вкладывать свои знания в open-source проекты, или помогать тем, кто пишет статьи или туториалы. Эти вещи очень ценятся сообществом и большинством потенциальных работадателей.

Изучите второй язык программирования

Python это мультипарадигмальный язык программирование, и во многих ситуациях, его хватает.
Но не смотря ни на что, всегда нужно искать преимущества в изучении других языков.
С помощью этого, Вы можете улучшить свои знания в программировании в целом, парадигмах и расширить свой кругозор. Когда Вы изучите один язык, изучение других будет проще. Большинство хороших программистов знают несколько языков.

Если Вы хотите быть веб-программистом, Вам вероятно нужно будет изучить JavaScript. Изучение C хорошо для лучшего понимания базовых концептов программирования, но Вы можете также писать на нём очень быстрые функции для Python. Rust это новый и очень классный язык, который уже имеет хорошую интеграцию с Python

Примеры проектов для практики

Имеется много маленьких проектов, которые Вы можете использовать для изучения Python. Например, попробуйте автоматизировать скучные задачи. Изучение строк, регулярных выражение, и даже библиотеки для шаблонов Jinja, может помочь Вам писать более эффективный код.

Официальный веб-сайт Flask содержит замечательную документацию и туториал, который Вы можете использовать для его изучения.

Doumly Machine Learning туториал имеет инструкции как Вы можете практиковаться в Data Science и machine learning.

Заключение

Вы прочитали несколько советов о том, как практиковаться Python. Надеюсь, они помогут Вам стать Python программистом. Запомните, что нужно много программировать, писать интересные программы, пытаться учиться на ошибках, и конечно же, стать частью сообщества.

Источник

🐍 Топ-20 бесплатных ресурсов для изучения Python: сохрани это в закладки

практика для новичков в python. a9f8d564bf57179d592f28d139a7883f. практика для новичков в python фото. практика для новичков в python-a9f8d564bf57179d592f28d139a7883f. картинка практика для новичков в python. картинка a9f8d564bf57179d592f28d139a7883f.

Бесплатные курсы и пособия для программистов на Python

Получить теоретические знания и практические навыки проще всего на курсах, притом некоторые из них есть в свободном доступе. Не стоит думать, будто бесплатные курсы – пустая трата времени. Новичкам они помогут получить базовое представление о языке программирования, способах его применения и потенциале развития в профессии.

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

Материал подойдет тем, кто не имеет опыта программирования. Курс содержит 28 уроков, разъясняющих базовые понятие и элементы синтаксиса Python: списки, операторы, циклы, условия, строковые и числовые переменные. Для проверки знаний доступно 27 тестов. В продолжении курса есть еще 19 уроков и 25 тестов с реальными задачи и советами по каждой теме.

Введение в Python

Теоретическая информация по синтаксису, типам коллекций, функциям, операторам и юникоду с проверкой пройденного материала после каждой лекции. Для каждого урока доступно видео с текстовой базой (основные моменты теории и код).

практика для новичков в python. 6d51429cc5f2654ce91f85596247fa32. практика для новичков в python фото. практика для новичков в python-6d51429cc5f2654ce91f85596247fa32. картинка практика для новичков в python. картинка 6d51429cc5f2654ce91f85596247fa32.

Язык программирования Python: Информация

Подойдет для любителей читать, т.к. в курсе много теоретической информации в виде текста. Рассмотрены библиотеки и форматы данных, а главное – применение Python для создания программ в разных предметных областях.

практика для новичков в python. efea0f5c2bba0563c1f65489a54b4e98. практика для новичков в python фото. практика для новичков в python-efea0f5c2bba0563c1f65489a54b4e98. картинка практика для новичков в python. картинка efea0f5c2bba0563c1f65489a54b4e98.

A Byte of Python

Learnpython.org

Информация для новичков и опытных программистов: основы (функции, классы, операции и т.д.), руководство по базам данных, материалы для продвинутых разработчиков (специализации, карты, многопользовательские аргументы, частичные функции и пр.). Здесь можно проверить знания на практике: написать код, запустить программу и получить отчет по ошибкам.

практика для новичков в python. 19d640f1d1cff7080e7095668c034287. практика для новичков в python фото. практика для новичков в python-19d640f1d1cff7080e7095668c034287. картинка практика для новичков в python. картинка 19d640f1d1cff7080e7095668c034287.

Codecademy

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

Udemy

На этом сайте собрано несколько бесплатных курсов c видеоматериалами. Наиболее востребованы следующие:

практика для новичков в python. dd51d9fcb374e3bec25fe0636d2ff2f2. практика для новичков в python фото. практика для новичков в python-dd51d9fcb374e3bec25fe0636d2ff2f2. картинка практика для новичков в python. картинка dd51d9fcb374e3bec25fe0636d2ff2f2.

Educative

Интеграционная текстовая платформа, которая позволяет изучать концепцию и писать код по каждому уроку. Новичку не придется ничего скачивать и настраивать на своем устройстве, все обучение происходит на сайте. В начале курса идет объяснение основ и концепций, по которым придется решать задачи для работы с функциональным программированием и структурами данных.

практика для новичков в python. 6148eebfa66580ad3e3e313ecd48c400. практика для новичков в python фото. практика для новичков в python-6148eebfa66580ad3e3e313ecd48c400. картинка практика для новичков в python. картинка 6148eebfa66580ad3e3e313ecd48c400.

Coursera

Этот популярный ресурс предлагает несколько учебных программ от специалистов ведущих университетов (INSEAD, Stanford, National University of Singapore и прочие). Стоит обратить внимание на курс от преподавателей Мичиганского университета « Специализация Python для всех », который (среди прочего) включает следующие разделы: « Структуры данных в Python », « Capstone: Retrieving, Processing, and Visualizing Data with Python» и « Using Databases with Python ».

Code School

Бесплатно после регистрации можно получить доступ только на 10 дней, а за дальнейшее обучение нужно заплатить 29$. Материалы курсов рассчитаны опытных разработчиков, которым необходимо повысить уровень знаний.

Codewars

Интерактивный ресурс с собранием функциональных задач, интересными тестами, отображением результатов, проведением дискуссий с коллегами и повышением ранга. Игровой процесс мотивирует быстро щелкать задачки.

Chekio

Игровая платформа, в которой получение новых знаний и навыков кодирования происходит в непринужденном режиме. Творческий подход к обучению и поддержка коллег позволяют достичь желаемых целей в короткие сроки.

w3schools

Для любителей разработки это отличный ресурс, который позволяет проверить знания Python. На сайте можно изучить теоретические основы языка и примеры его использования, а также поупражняться в создании программ по всем представленным материалам.

практика для новичков в python. 68caa73fbd22d63cdf2b73d0f4ed461e. практика для новичков в python фото. практика для новичков в python-68caa73fbd22d63cdf2b73d0f4ed461e. картинка практика для новичков в python. картинка 68caa73fbd22d63cdf2b73d0f4ed461e.

Сообщества разработчиков программ на Python

Обучение в режиме общения, консультации с коллегами, ответы на конкретные вопросы – все это можно получить в сообществах. Их преимуществом является бесплатная поддержка от начинающих разработчиков и матерых специалистов. Задавать вопросы нужно, четко обозначив тему и расписав требующую решения проблему.

Форум Python Программистов

Профессиональные программисты в сообществе отвечают на вопросы новичков и более опытных разработчиков. Здесь можно быстро получить консультацию по коду, если правильно оформить заголовок и четко сформулировать вопрос.

Pyslackers

Международное сообщество, которое собрало единомышленников по программированию на Python. Общение происходит через сервис Slack, в котором написать и быстро найти любого участника сообщества не составит труда. Общение по тематическим каналам и личная переписка ускорят процесс обучения и решения проблем.

Python-сообщество

Бесплатные видеолекции по программированию на Python

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

Изучаем Python – Полный курс для начинающих

Видео англоязычное, но с русскими субтитрами. В длительной (более 4-х часов) лекции собрана информация по установке и настройке Python и PyCharm, показано создание калькулятора и игры. В курсе представлено все – от переменных и списков, до модулей и функций.

Python Tutorial – Python for Beginners

Классы, модули, параметры и другая теория рассмотрена в шестичасовом видео. В конце инструктор Мош разбирает три проекта: по автоматизации, машинному обучению, а также по созданию веб-сайта. Лектор дает материал на хорошем английском, доступны также субтитры на русском языке.

Python Tutorial for Beginners

Плейлист из 220 видео, в котором собраны всевозможные данные для изучающих программирование на Python новичков. Синтаксис, команды, обработка исключений, расширения и все прочее, что нужно для интерактивного обучения.

Google Python Class

19 видео от команды Google Developers с информацией о веб-программировании на Python. Опытные разработчики демонстрируют практическое применение материала, представленного на теоретических курсах Google’s Python Class.

На Python создают прикладные приложения, пишут тесты и бэкенд веб-приложений, автоматизируют задачи в системном администрировании, его используют в нейронных сетях и анализе больших данных. Язык можно изучить самостоятельно, но на это придется потратить немало времени. Если вы хотите быстро понять основы программирования на Python, обратите внимание на онлайн-курс «Библиотеки программиста». За 30 уроков (15 теоретических и 15 практических занятий) под руководством практикующих экспертов вы не только изучите основы синтаксиса, но и освоите две интегрированные среды разработки (PyCharm и Jupyter Notebook), работу со словарями, парсинг веб-страниц, создание ботов для Telegram и Instagram, тестирование кода и даже анализ данных. Чтобы процесс обучения стал более интересным и комфортным, студенты получат от нас обратную связь. Кураторы и преподаватели курса ответят на все вопросы по теме лекций и практических занятий.

Источник

Python с абсолютного нуля. Учимся кодить без скучных книжек

практика для новичков в python. python h. практика для новичков в python фото. практика для новичков в python-python h. картинка практика для новичков в python. картинка python h.

Содержание статьи

От редакции

Не­дав­но мы про­води­ли опрос о том, какой курс по Python был бы инте­рес­нее читате­лям. Две пер­вые строч­ки с боль­шим отры­вом в нем заняли вари­анты «для хакера» и «Python с нуля». Узнав о таком положе­нии дел, мы немед­ленно заказа­ли статью о том, как начать прог­рамми­ровать на Python. Если она будет иметь успех, то может прев­ратить­ся в целую серию. Отли­чие нашего под­хода — в том, что мы объ­ясня­ем все живым язы­ком и даем нес­кучные при­меры. В общем, обу­чение в фир­менном сти­ле «Хакера»!

И, пос­коль­ку это экспе­римент, статья дос­тупна без плат­ной под­писки.

Ес­ли у тебя на ком­пе есть сов­ремен­ный дис­три­бутив Linux, то в него уже вхо­дит Python 3, а писать пер­вые прог­раммы будет удоб­но в IDLE — прос­том редак­торе кода, который при­лага­ется к Python. В Ubuntu, что­бы уста­новить его, набери в кон­соли

В Windows при уста­нов­ке Python обя­затель­но отметь на пер­вом экра­не уста­нов­щика галоч­ку Add to Path, что­бы мож­но было запус­кать python3 из коман­дной стро­ки в любом удоб­ном мес­те.

За­пус­тив IDLE, зай­ди в Options → Configure IDLE, перей­ди на вклад­ку General и пос­тавь галоч­ку на пун­кте Open Edit Window, наж­ми ОK и переза­пус­ти IDLE. Теперь мож­но писать прог­раммы, сох­ранять их и запус­кать кла­вишей F5. Ну что, пог­нали?

Переменные

А если изна­чаль­но неиз­вес­тно, какие чис­ла надо скла­дывать? Тог­да приш­лось бы спер­ва поп­росить юзе­ра ввес­ти их в кон­соли и нажать Enter. Давай так и сде­лаем:

Внут­ри ско­бочек у input ты пишешь пояс­нение для юзе­ра, что кон­крет­но его про­сят ввес­ти. Но вот беда, по умол­чанию все, что вво­дит­ся через input, счи­тает­ся не чис­лом, а стро­кой, поэто­му, преж­де чем скла­дывать количес­тво лит­ров пива, нуж­но сна­чала пре­обра­зовать вве­ден­ные стро­ки в чис­ла с помощью фун­кции int().

Во­обще, типов перемен­ных мно­го, но суть ты уло­вил — что­бы про­изво­дить с перемен­ными какие‑то дей­ствия, нуж­но их сна­чала при­вес­ти к одно­му типу — к стро­ково­му, или к чис­ловому, или еще к какому‑нибудь. Если с этим не замора­чивать­ся, Python сло­жит не чис­ла, а стро­ки и вве­ден­ные 2 и 3 лит­ра пива в сум­ме дадут не 5, а целых 23. Хорошо бы так было в реаль­нос­ти!

Вот еще при­мер­чик, рас­счи­тыва­ющий, сколь­ко тебе еще пить пиво, исхо­дя из сред­ней про­дол­житель­нос­ти жиз­ни в Рос­сии:

Условия

В осно­ве любой прог­раммы лежат усло­вия. В зависи­мос­ти от того, выпол­няют­ся они или не выпол­няют­ся, прог­рамма может пой­ти по одно­му или дру­гому пути. Пред­ставь, ты едешь на машине и смот­ришь на часы: если уже есть десять вечера, то повора­чива­ешь домой, если нет, то мож­но заехать в гос­ти. Точ­но так же работа­ет и прог­рамма: про­веря­ет какое‑то зна­чение и сво­рачи­вает туда или сюда и выпол­няет соот­ветс­тву­ющий кусочек кода.

Бло­ки кода в Python отде­лают­ся отсту­пами. Отступ на самом деле может быть любым, нап­ример некото­рые пред­почита­ют исполь­зовать вмес­то четырех про­белов кла­вишу Tab. Глав­ное — не сме­шивать в одной прог­рамме отсту­пы раз­ного типа. Если уж начал исполь­зовать четыре про­бела, то исполь­зуй по всей прог­рамме, а то Python будет на тебя ругать­ся и уни­жать.

Еще один важ­ный момент здесь — это знак равенс­тва в усло­вии. Он пишет­ся как двой­ное «рав­но» ( == ) и этим отли­чает­ся от прис­воения — оди­нар­ного «рав­но».

Фун­кция lower(), преж­де чем срав­нивать усло­вие, дела­ет все бук­вы в стро­ке малень­кими, потому что глу­пый юзер может ввес­ти сло­во YES с горящим Caps Lock, и это надо пре­дус­мотреть заранее.

На самом деле lower( ) — не прос­то фун­кция, а метод клас­са string (стро­ка). Имен­но поэто­му он вызыва­ется через точ­ку пос­ле перемен­ной, которая содер­жит стро­ку. О клас­сах и методах мы погово­рим как‑нибудь в дру­гой раз, а пока прос­то запом­ни, что некото­рые фун­кции вызыва­ются таким обра­зом.

Источник

Как выучить python || План обучения с нуля

Всем привет. Решил поделиться планом обучения python с нуля и до приемлимого уровня.

Итак рекомендую начать обучение с прочтения книги «Byte of Python « или по русски укус питона. Это очень маленькая книжка, прочтение которой не отнимет у вас много времени, но зато вы уже сможете получить знания об основах языка. Все кратно и по делу.
Ссылка: https://wombat.org.ua/AByteOfPython/#id10

Далее стоит закрепить полученные знания в курсе на сайте stepik : «Поколение Python»: курс для начинающих

После этого курса стоит немного уделить времени алгоритмам, в этом нам поможет книга “Грокаем аглоритмы”, все примеры в этой книге так же разбираются на языке пайтон, что очень удобно для нас.

После книги про алгоритмы возвращаемся на stepik и проходим курс «Python: основы и применение.» Здесь вы еще больше погрузитесь в язык. изучите классы, попробуете поработать с различными АПИ. В общем будет чем заняться.
Ссылка: https://stepik.org/course/512/syllabus

После этого курса я рекомендую пару недель уделить только решению различных задач по программированию. Для этого существует множество сайтов, я оставлю ссылки на все в описании. Выбирайте какой больше понравится. Лично мне больше всех понравился chekio. Знаю, что многие любят codewars.

Сайты где можно порешать задачки Python:

Вне зависимости от того какой сайт вы выберете, рекомендую начинать с более простых задач, и решать по 3-5 штук в день. Так же после решения, вам будет позволено посмотреть как эту задачу решили другие участники. Почти всегда это будет сделано более элегантным или продвинутым способом. В общем на решениях других людей тоже можно многое почерпнуть.

Далее стоит ознакомиться с ютуб каналом Computer science center

Здесь уже рассматривают продвинутые техники языка. Очень рекомендую к ознакомлению.

Если вам больше нравится читать книги, то вместо этого курса могу порекомендовать книгу «Python. К вершинам мастерства.»

Еще есть вот такой курс от Яндекса.

Так же не забываем постоянно решать задачки с сайтов, чтобы постоянно была практика.

При среднем темпе обучения, на все эти шаги у вас уйдет 3-4 месяца.

На этом этапе уже можно спокойно начать погружаться в выбранную Вами сферу, будь это веб программирование с помощью фреймворков джанго, фласк или может быть датасаенс. Это уже выходит за рамки данного поста. То как стать датасаентистом, мы разбирали в этом посте:

Так же эти ресурсы могут быть вам полезны:

Книга: Изучаем Python. Том 1 | Лутц Марк

Книга: Изучаем Python. Том 2 | Лутц Марк

Книга: Доусон М. Программируем на Python.

У нас есть чатик в телеграмме где мы обсуждаем с подписчиками различные вопросы, залетай к нам! https://t.me/DataScienceGuy

Сейчас смотрю лекции Хирьянова.

О, от яндекса курс не видела ещё, спасибо.

Салют! Ты с 0 осваивал pyhton? Сколько времени заняло обучение чтобы выйти на начальный уровень?

Крутяк! Хотеть подобный пост про Java

Давно хотел изучить Питон, но никак не мог найти правильный ракурс подхода к данному вопросу. Опираясь на Ваш пост уже прошел курс «Поколение Python: курс для начинающих» и прочел книги «Byte of Python» и «Грокаем алгоритмы». Так вот, к чему это я. Дойдя до курса «Python: основы и применение.» я познал боль и отчаяние. Был вынужден искать новые пути познания и пока остановился на курсе «Инди-курс программирования на Python от egoroff_channel» от Артема Егорова (ссылку оставлять не стану на случай, если автор против подобных вбросов). Данный курс часто появлялся в комментах на «Основах и применении» как единственная панацея, что я и решил проверить. Не знаю, проблема ли в качестве изложения авторов курса из Вашего списка, либо в резком перепаде сложности курсов, но что-то не пошло. Возможно стоит рассмотреть какую-то прослойку из переходного курса или вспомогательных материалов. Дело Ваше, но я говорю от лица человека, который по данному посту с нуля решил обучиться и встретил определенные сложности.

Во всяком случае, путь мой только начат, и начат он не без Вашей помощи. Спасибо 🙂

Пы.Сы: хотел просто вбросить про возможно неплохое дополнение к программе обучения, но что-то занесло хехехе.

Спасибо, а почему бы и нет!

Здравствуйте. Есть предложение по сотрудничеству. Если интересно- напишите ermolenko_olja@mail.ru

А мне кажется, что бесплатно сложно научиться, мотивация не такая сильная, в отличие от того
если ты заплатил за курс. Есть относительно не дорогие, но очень качественные курсы https://codeby.net/threads/kurs-python-dlja-pentestera.70415. Пять месяцев обучения от нуля до продвинутого. Домашнее задание проверяется в ручную, преподаватели всегда на связи.

А у меня создалось ощущение, что питон просто очередная мода. Может быть востребован ещё долго, а может и отвалится. Помнится на перл поначалу также многие молились.
Сам пользуюсь уже лет 10 для автоматизации и мне в принципе питон очень нравится. Но крупный серьёзный проект скорее всего на нем не стал бы делать.

За сссылки спасибо, сохранил.

Оставлю комент. Завтра почитаю.

ТС скажи как у питона обстоят дела с ООП

На всякий случай изучу. А то в селе скучно стало, клуб и тот закрыли.

найти заказчика, который скажет: Тебе надо закрыть этот проект на питоне «на вчера»

Ну не летом же начинать такое серьезное дело, а вот с числа точно начну!:))

практика для новичков в python. m1295471 486430373. практика для новичков в python фото. практика для новичков в python-m1295471 486430373. картинка практика для новичков в python. картинка m1295471 486430373.

практика для новичков в python. 1576660997254036587. практика для новичков в python фото. практика для новичков в python-1576660997254036587. картинка практика для новичков в python. картинка 1576660997254036587.

Вот уже на протяжении нескольких лет Тимофей, преподаватель кафедры информатики МФТИ, выкладывает свои лекции по программированию на своём Youtube канале с открытым доступом.

практика для новичков в python. m1508234 194399205. практика для новичков в python фото. практика для новичков в python-m1508234 194399205. картинка практика для новичков в python. картинка m1508234 194399205.

практика для новичков в python. 1632439036273151541. практика для новичков в python фото. практика для новичков в python-1632439036273151541. картинка практика для новичков в python. картинка 1632439036273151541.

практика для новичков в python. 1633981991159623114. практика для новичков в python фото. практика для новичков в python-1633981991159623114. картинка практика для новичков в python. картинка 1633981991159623114.

практика для новичков в python. m2996554 896076101. практика для новичков в python фото. практика для новичков в python-m2996554 896076101. картинка практика для новичков в python. картинка m2996554 896076101.

практика для новичков в python. 162543623527961668. практика для новичков в python фото. практика для новичков в python-162543623527961668. картинка практика для новичков в python. картинка 162543623527961668.

Разработка системы заметок с нуля. Часть 2: REST API для RESTful API Service + JWT + Swagger

Продолжаем серию материалов про создание системы заметок. В этой части мы спроектируем и разработаем RESTful API Service на Go cо Swagger и авторизацией. Будет много кода, ещё больше рефакторинга и даже немного интеграционных тестов.

В первой части мы спроектировали систему и посмотрели, какие сервисы требуются для построения микросервисной архитектуры.

Подробности в видео и текстовой расшифровке под ним.

Начнём с макетов интерфейса. Нам нужно понять, какие ручки будут у нашего API и какой состав данных он должен отдавать. Макеты мы будем делать, чтобы понять, какие сущности, поля и эндпоинты нам нужны. Используем для этого онлайн-сервис NinjaMock. Он подходит, если макет надо сделать быстро и без лишних действий.

Страницу регистрации сделаем простую, с четырьмя полями: Name, Email, Password и Repeat Password. Лейблы делать не будем, обойдемся плейсходерами. Авторизацию сделаем по юзернейму и паролю.

После входа в приложение пользователь увидит список заметок, который будет выглядеть примерно так:

практика для новичков в python. 1633769605135963852. практика для новичков в python фото. практика для новичков в python-1633769605135963852. картинка практика для новичков в python. картинка 1633769605135963852.

Интерфейс, который будет у нашего веб-приложения:

— Слева — список категорий любой вложенности.

— Справа — список заметок в виде карточек, который делится на два списка: прикреплённые и обычные карточки.

— Каждая карточка состоит из заголовка, который урезается, если он очень длинный.

— Справа указано, сколько секунд/минут/часов/дней назад была создана заметка.

— Тело заголовка — отрендеренный Markdown.

— Панель инструментов. Через неё можно изменить цвет, прикрепить или удалить заметку.

Тут важно отметить, что файлы заметки мы не отображаем и не будем запрашивать у API для списка заметок.

Полная карточка открывается по клику на заметку. Тут можно сразу отобразить полностью длинный заголовок. Высота заметки зависит от количества текста. Для файлов появляется отдельная секция. Мы их будем получать отдельным асинхронным запросом, который не помешает пользователю редактировать заметку. Файлы можно скачать по ссылке, также есть отдельная кнопка на добавление файлов.

практика для новичков в python. 1633769655136579524. практика для новичков в python фото. практика для новичков в python-1633769655136579524. картинка практика для новичков в python. картинка 1633769655136579524.

Так будет выглядеть открытая заметка

В ходе прототипирования стало понятно, что в первой части мы забыли добавить еще один микросервис — TagsService. Он будет управлять тегами.

Для страниц авторизации и регистрации нам нужны эндпоинты аутентификации и регистрации соответственно. В качестве аутентификации и сессий пользователя мы будем использовать JWT. Что это такое и как работает, разберём чуть позднее. Пока просто запомните эти 3 буквы.

Для страницы списка заметок нам нужны эндпоинты /api/categories для получения древовидного списка категорий и /api/notes?category_id=? для получения списка заметок текущей категории. Перемещаясь по другим категориям, мы будем отдельно запрашивать заметки для выбранной категории, а на фронтенде сделаем кэш на клиенте. В ходе работы с заметками нам нужно уметь создавать новую категорию. Это будет метод POST на URL /api/categories. Также мы будем создавать новый тег при помощи метода POST на URL /api/tags.

практика для новичков в python. 1633769692178813097. практика для новичков в python фото. практика для новичков в python-1633769692178813097. картинка практика для новичков в python. картинка 1633769692178813097.

Чтобы обновить заметку, используем метод PATCH на URL /api/notes/:uuid с измененными полями. Делаем PATCH, а не PUT, потому что PUT требует отправки всех полей сущности по спецификации HTTP, а PATCH как раз нужен для частичного обновления. Для отображения заметки нам ещё нужен эндпоинт /api/notes/:uuid/files с методами POST и GET. Также нам нужно скачивать файл, поэтому сделаем метод GET на URL /api/files/:uuid.

практика для новичков в python. 16337697121965902. практика для новичков в python фото. практика для новичков в python-16337697121965902. картинка практика для новичков в python. картинка 16337697121965902.

Структура репозитория системы

Ещё немного общей информации. Структура репозитория всей системы будет выглядеть следующим образом:

практика для новичков в python. 1633769752198117170. практика для новичков в python фото. практика для новичков в python-1633769752198117170. картинка практика для новичков в python. картинка 1633769752198117170.

В директории app будет исходный код сервиса (если он будет). На уровне с app будут другие директории других продуктов, которые используются с этим сервисом, например, MongoDB или ELK. Продукты, которые будут использоваться на уровне всей системы, например, Consul, будут в отдельных директориях на уровне с сервисами.

Писать будем на Go

— Идём на официальный сайт.

— Копируем ссылку до архива, скачиваем, проверяем хеш-сумму.

— Распаковываем и добавляем в переменную PATH путь до бинарников Go

— Пишем небольшой тест проверки работоспособности, собираем бинарник и запускаем.

Установка завершена, всё работает

Теперь создаём проект. Структура стандартная:

— cmd — точка входа в приложение,

— internal — внутренняя бизнес-логика приложения,

— pkg — для кода, который можно переиспользовать из проекта в проект.

Я очень люблю логировать ход работы приложения, поэтому перенесу свою обёртку над логером logrus из другого проекта. Основная функция здесь Init, которая создает логер, папку logs и в ней файл all.log со всеми логами. Кроме файла логи будут выводиться в STDOUT. Также в пакете реализована поддержка логирования в разные файлы с разным уровнем логирования, но в текущем проекте мы это использовать не будем.

APIService будет работать на сокете. Создаём роутер, затем файл с сокетом и начинаем его слушать. Также мы хотим перехватывать от системы сигналы завершения работы. Например, если кто-то пошлёт приложению сигнал SIGHUP, приложение должно корректно завершиться, закрыв все текущие соединения и сессии. Хотел перехватывать все сигналы, но линтер предупреждает, что os.Kill и SIGSTOP перехватить не получится, поэтому их удаляем из этого списка.

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

Далее создаём точку входа в приложение. В директории cmd создаём директорию main, а в ней — файл app.go. В нём мы создаём функцию main, в которой инициализируем и создаём логер. Роутер создаём через ключевое слово defer, чтобы метод Init у роутера вызвался только тогда, когда завершится функция main. Таким образом можно выполнять очистку ресурсов, закрытие контекстов и отложенный запуск методов. Запускаем, проверяем логи и сокет, всё работает.

Но для разработки нам нужно запускать приложение на порту, а не на сокете. Поэтому давайте добавим запуск приложения на порту в наш роутер. Определять, как запускать приложение, мы будем с помощью конфига.

Создадим для приложения контекст. Сделаем его синглтоном при помощи механизма sync.Once. Пока что в нём будет только конфиг. Контекст в виде синглтона создаю исключительно в учебных целях, впоследствии он будет выпилен. В большинстве случаев синглтоны — необходимое зло, в нашем проекте они не нужны. Далее создаём конфиг. Это будет YAML-файл, который мы будем парсить в структуру.

В роутере мы вытаскиваем из контекста конфиг и на основании listen.type либо создаем сокет, либо вешаем приложение на порт. Код graceful shutdown выделяем в отдельный пакет и передаём на вход список сигналов и список интерфейсов io.Close, которые надо закрывать. Запускаем приложение и проверяем наш эндпоинт heartbeat. Всё работает. Давайте и конфиг сделаем синглтоном через механизм sync.Once, чтобы потом безболезненно удалить контекст, который создавался в учебных целях.

Теперь переходим к API. Создаём эндпоинты, полученные при анализе прототипов интерфейса. Тут важно отметить, что у нас все данные привязаны к пользователю. На первый взгляд, все ручки должны начинаться с пользователя и его идентификатора /api/users/:uuid. Но у нас будет авторизация, иначе любой пользователь сможет программно запросить заметки любого другого пользователя. Авторизацию можно сделать следующим образом: Basic Auth, Digest Auth, JSON Web Token, сессии и OAuth2. У всех способов есть свои плюсы и минусы. Для этого проекта мы возьмём JSON Web Token.

Работа с JSON Web Token

JSON Web Token (JWT) — это JSON-объект, который определён в открытом стандарте RFC 7519. Он считается одним из безопасных способов передачи информации между двумя участниками. Для его создания необходимо определить заголовок (header) с общей информацией по токену, полезные данные (payload), такие как id пользователя, его роль и т.д., а также подписи (signature).

JWT использует преимущества подхода цифровой подписи JWS (Signature) и кодирования JWE (Encrypting). Подпись не даёт кому-то подделать токен без информации о секретном ключе, а кодирование защищает от прочтения данных третьими лицами. Давайте разберёмся, как они могут нам помочь для аутентификации и авторизации пользователя.

Аутентификация — процедура проверки подлинности. Мы проверяем, есть ли пользователь с полученной связкой логин-пароль в нашей системе.

Авторизация — предоставление пользователю прав на выполнение определённых действий, а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий.

Другими словами, аутентификация проверяет легальность пользователя. Пользователь становится авторизированным, если может выполнять разрешённые действия.

Важно понимать, что использование JWT не скрывает и не маскирует данные автоматически. Причина использования JWT — проверка, что отправленные данные были действительно отправлены авторизованным источником. Данные внутри JWT закодированы и подписаны, но не зашифрованы. Цель кодирования данных — преобразование структуры. Подписанные данные позволяют получателю данных проверить аутентификацию источника данных.

Реализация JWT в нашем APIService:

— Создаём директории middleware и jwt, а также файл jwt.go.

— Описываем кастомные UserClaims и сам middlware.

— Получаем заголовок Authorization, оттуда берём токен.

— Берём секрет из конфига.

— Создаём верификатор HMAC.

— Парсим и проверяем токен.

— Анмаршалим полученные данные в модель UserClaims.

— Проверяем, что токен валидный на текущий момент.

При любой ошибке отдаём ответ с кодом 401 Unauthorized. Если ошибок не было, в контекст сохраняем ID пользователя в параметр user_id, чтобы во всех хендлерах его можно было получить. Теперь надо этот токен сгенерировать. Это будет делать хендлер авторизации с методом POST и эндпоинтом /api/auth. Он получает входные данные в виде полей username и password, которые мы описываем отдельной структурой user. Здесь также будет взаимодействие с UserService, нам надо там искать пользователя по полученным данным. Если такой пользователь есть, то создаём для него UserClaims, в которых указываем все нужные для нас данные. Определяем время жизни токена при помощи переменной ExpiresAt — берём текущее время и добавляем 15 секунд. Билдим токен и отдаём в виде JSON в параметре token. Клиента к UserService у нас пока нет, поэтому делаем заглушку.

Добавим в хендлер с heartbeat еще один тестовый хендлер, чтобы проверить работу аутентификации. Пишем небольшой тест. Для этого используем инструмент sketch, встроенный в IDE. Делаем POST-запрос на /api/auth, получаем токен и подставляем его в следующий запрос. Получаем ответ от эндпоинта /api/heartbeat, по истечении 5 секунд мы начнём получать ошибку с кодом 401 Unauthorized.

Наш токен действителен очень ограниченное время. Сейчас это 15 секунд, а будет минут 30. Но этого всё равно мало. Когда токен протухнет, пользователю необходимо будет заново авторизовываться в системе. Это сделано для того, чтобы защитить пользовательские данные. Если злоумышленник украдет токен авторизации, который будет действовать очень большой промежуток времени или вообще бессрочно, то это будет провал.

Чтобы этого избежать, прикрутим refresh-токен. Он позволит пересоздать основной токен доступа без запроса данных авторизации пользователя. Такие токены живут очень долго или вообще бессрочно. После того как только старый JWT истекает мы больше не можем обратиться к API. Тогда отправляем refresh-токен. Нам приходит новая пара токена доступа и refresh-токена.

Хранить refresh-токены на сервере мы будем в кэше. В качестве реализации возьмём FreeCache. Я использую свою обёртку над кэшем из другого проекта, которая позволяет заменить реализацию FreeCache на любую другую, так как отдает интерфейс Repository с методами, которые никак не связаны с библиотекой.

Пока рассуждал про кэш, решил зарефакторить существующий код, чтобы было удобней прокидывать объекты без dependency injection и синглтонов. Обернул хендлеры и роутер в структуры. В хендлерах сделал интерфейс с методом Register, которые регистрируют его в роутере. Все объекты теперь инициализируются в main, весь роутер переехал в мейн. Старт приложения выделили в отдельную функцию также в main-файле. Теперь, если хендлеру нужен какой-то объект, я его просто буду добавлять в конструктор структуры хендлера, а инициализировать в main. Плюс появилась возможность прокидывать всем хендлерам свой логер. Это будет удобно когда надо будет добавлять поле trace_id от Zipkin в строчку лога.

Вернемся к refresh_token. Теперь при создании токена доступа создадим refresh_token и отдадим его вместе с основным. Сделаем обработку метода PUT для эндпоинта /api/auth, а в теле запроса будем ожидать параметр refresh_token, чтобы сгенерировать новую пару токена доступа и refresh-токена. Refresh-токен мы кладём в кэш в качестве ключа. Значением будет user_id, чтобы по нему можно было запросить данные пользователя у UserService и сгенерировать новый токен доступа. Refresh-токен одноразовый, поэтому сразу после получения токена из кэша удаляем его.

Для описания нашего API будем использовать спецификацию OpenAPI 3.0 и Swagger — YAML-файл, который описывает все схемы данных и все эндпоинты. По нему очень легко ориентироваться, у него приятный интерфейс. Но описывать вручную всё очень муторно, поэтому лучше генерировать его кодом.

— Создаём эндпоинты /api/auth с методами POST и PUT для получения токена по юзернейму и паролю и по Refresh-токену соответственно.

— Добавляем схемы объектов Token и User.

— Создаём эндпоинты /api/users с методом POST для регистрации нового пользователя. Для него создаём схему CreateUser.

Понимаем, что забыли сделать хендлер для регистрации пользователя. Создаём метод Signup у хенлера Auth и структуру newUser со всеми полями для регистрации. Генерацию JWT выделяем в отдельный метод, чтобы можно было его вызывать как в Auth, так и в Signup-хендлерах. У нас всё еще нет UserService, поэтому проставляем TODO. Нам надо будет провалидировать полученные данные от пользователя и потом отправить их в UserService, чтобы он уже создал пользователя и ответил нам об успехе. Далее вызываем функцию создания пары токена доступа и refresh-токена и отдаём с кодом 201.

У нас есть подсказка в виде Swagger-файла. На его основе создаём все нужные хендлеры. Там, где вызов микросервисов, будем проставлять комментарий с TODO.

Создаём хендлер для категорий, определяем URL в константах. Далее создаём структуры. Опираемся на Swagger-файл, который создали ранее. Далее создаём сам хендлер и реализуем метод Register, который регистрирует его в роутере. Затем создаём методы с логикой работы и сразу пишем тест API на этот метод. Проверяем, находим ошибки в сваггере. Таким образом мы создаём все методы по работе с категориями: получение и создание.

Далее создаём таким же образом хендлер для заметок. Понимаем, что забыли методы частичного обновления и удаления как для заметок, так и для категорий. Дописываем их в Swagger и реализуем методы в коде. Также обязательно тестируем Swagger в онлайн-редакторе.

Здесь надо обратить внимание на то, что методы создания сущности возвращают код ответа 201 и заголовок Location, в котором находится URL для получения сущности. Оттуда можно вытащить идентификатор созданной сущности.

В третьей части мы познакомимся с графовой базой данных Neo4j, а также будем работать над микросервисами CategoryService и APIService.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *