Python School
95K subscribers
1.89K photos
5 videos
547 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official
Download Telegram
Подсказки типов | Ожидание типа | Type hinting (Python 3.5+) 2 часть

Динамические языки не заставляют Вас определять тип переменных перед тем, как их использовать.

Утиная типизация: «Если это выглядит как утка и крякает как утка, значит это утка».

Спор о том, какое типизирование python лучше — статическое или динамическое — не умолкают и по сей день и у каждого есть свое мнение на этот счет.

Это личное дело читателя — когда ему нужно вписывать типы, но мне кажется что вы как минимум должны знать о том, что Python 3 поддерживает подсказки типов.
Правдивость различных объектов

В отличие от некоторых языков программирования, в Python объект считается false, только если он пуст. Это значит, что не нужно проверять длину строки, кортежа или словаря — достаточно проверить его как логическое выражение.

Легко предсказать, что 0 — тоже false, а остальные числа — true.

Например, следующие выражения эквивалентны. В данном случае my_object — строка, но здесь мог оказаться другой тип (с соответствующими изменениями условий блока if).
Как работают Google и Netflix? Как создать искусственный интеллект наподобие Джарвиса у Железного человека? Узнайте на бесплатных практических вебинарах по программированию!

Регистрация по ссылке: 👉 https://clc.am/ia5DKQ

✔️ Поймёте, как и в каком направлении развиваться в IT-индустрии в 2021 году.
✔️ Выясните, чем Python отличается от других языков программирования и как им пользоваться.
✔️ Напишете первые строчки кода.
✔️ Узнаете, как стать Data Scientist и какие задачи решает машинное обучение.

💣 Во время вебинаров сможете задать вопросы спикерам и получить ответы в прямом эфире. Попрактикуетесь в программировании на нескольких языках.

🎁 Всех участников мастер-классов ждут подарки от Skillbox и партнёров — месяц бесплатного обучения английскому языку в онлайн-школе КЭСПА и полезная книга от издательства МИФ. А если дойдёте до конца марафона, подарим сертификат на 15 000 рублей на любой курс Skillbox!

Спешите зарегистрироваться: https://clc.am/ia5DKQ
Проверка прав доступа через декораторы

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

Поскольку фактическая проверка разрешений зависит от приложения, здесь будет показан общий пример, в котором просто дает разрешение на выполнение запроса на основе значения из HTTP заголовка.
Создайте голосового помощника на Python! Начните осваивать востребованный язык программирования и прокачайте навыки. 26–28 июля, в 21:00 по московскому времени участвуйте в онлайн-интенсиве.

Регистрируйтесь бесплатно 👉 https://clc.am/BrBtGg.

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

☝️ Преподавателем будет ведущий исследователь данных в Сбербанке, математик-программист Анастасия Борнева.

⭐️ Все участники получат электронную книгу Кей Петерсон и Дэвида Колба «Век живи — век учись» от издательства «МИФ». А те, кто сдаст домашнее задание, — сертификаты на 5 000 рублей на любой курс Skillbox.

Присоединяйтесь!
Фильтры NEAREST, BILINEAR и BICUBIC в Pillow

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

• Image.NEAREST (ближайший сосед / по умолчанию);
• Image.BILINEAR;
• Image.BICUBIC.

С помощью фильтра Image.BICUBIC детали изображения станут более четким, чем в случае использования фильтра по умолчанию Image.NEAREST.

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

Еще один полезный метод, который может быть реализован с помощью декораторов, заключается в проверке данных до запуска декорированной функции. Очень распространенный этому пример в веб-приложении — это аутентификация пользователя. Если задача проверки/аутентификации завершается неудачно, то декорированная функция не вызывается, и вместо нее появляется ошибка.

В данном примере, декоратор only_admins ищет HTTP заголовок X-Auth-Token во входящем запросе и затем проверяет, если он совпадает с секретным токеном администратора, который для простоты мы сделали константой.

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

Обратите внимание, как в примере функции представления admin_route() используются декораторы app.route и only_admins. Это называется цепью декораторов.
Освойте программирование с нуля! Зарегистрируйтесь и получите бесплатный доступ к онлайн-курсам и интенсивам по программированию от Skillbox на 7 дней.

✔️ Познакомитесь с введением в программирование, веб-вёрсткой и профессией Go-разработчика.

✔️ Научитесь работать с макетами и форматировать код, освоите адаптивную вёрстку.

✔️ Узнаете о тестировании — одном из самых востребованных направлений в сфере IT, где не нужен опыт программирования.

✔️ Автоматически получите доступ к выбранному направлению при регистрации.

Не упустите шанс найти себя в программировании! 👉 https://clc.am/ThpcDA
Хранение хеша и соли

Для хранения можно использовать методы JSON, SQL, CSV и даже простой текстовый файл. Убедитесь, что пароль нигде не сохранен, ведь в этом состоит главная цель — избежать необходимость сохранения действующего пароля в исходном виде.

Если вы ограничены только одним местом для хранения, можете добавить соль и пароль вместе и потом сохранить их. Можно будет разделить их во время чтения, когда вам будет известна длина соли и ключа.
Как выстроить защиту продуктов и систем от кибератак?
На курсе «Специалист по информационной безопасности» от команды HackerU вы получите знания и менторство от лучших специалистов рынка, каждый день отражающих кибератаки и развивающихся в кибербезе.

Чему вы научитесь на курсе?
— Выявлять уязвимости в веб-приложениях, программах, операционных системах и почтовых серверах
— Различные способы отражения кибератак на инфраструктуру
— Администрировать сети и операционные системы и многое другое

Осталось много вопросов по специальности и карьерным возможностям? Записывайтесь на бесплатный пробный урок по кибербезопасности с экспертами курса!

Урок проходит онлайн в закрытой видеоконфе, где вы разбираете roadmap, решаете первые задачи, задаете любые вопросы и получаете ответы.

Записывайтесь на бесплатный пробный урок по ссылке: https://is.gd/PshvCW
Объединение словарей

Допустим, у вас есть словарь со значениями по умолчанию, и вы хотите обновить его параметры. До Python 3.9 лучшим вариантом было скопировать словарь по умолчанию, а затем использовать метод .update().

Обратите внимание, что порядок имеет значение. В данном случае значение where из params переопределяет значение по умолчанию, как и должно быть.
25 000 рублей за пару часов твоего времени

Интересно? На это способен даже 15-и летний школьник, подписанный на канал «У соседа лучше».

Не важно, работаешь ты или зарабатываешь (ага), ~300$ баксов никогда не будут лишними. Особенно, если речь идет всего о паре часов твоего времени. Поверь, оно того стоит.

Подробнее:
https://t.me/joinchat/J6jRK1d1rIBlMzYy
Хеширование паролей Python
Для Python 3.x

Здесь пароли будут хешироваться для последующего сохранения в базе данных.

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

salt используется для предотвращения перебора по словарю (dictionary attack) и атак радужной таблицы (rainbow tables attacks).
Загляните в мир разработки на Python! Пройдите бесплатный интенсив Skillbox и начните осваивать один из самых распространённых языков программирования.

Регистрируйтесь: 👉 https://clc.am/Flarww.

📌 Освоите азы программирования на Python и разберёте основные элементы языка.
📌 Поработаете с библиотеками PyQT, Kivy, wxWidgets, tkinter и поймёте основы сетевого ПО.
📌 Напишете интерфейс мессенджера на Python на практических занятиях.

⭐️ Спикер интенсива — Михаил Овчинников, специалист с 17-летним опытом в области разработки высоконагруженных систем, обработки больших данных и машинного обучения.

🎁 Сдайте домашнее задание и получите сертификат стоимостью 15 000 рублей на любой онлайн-курс Skillbox!

Ждём вас в прямом эфире со 2 по 4 августа, в 19:00 по московскому времени 😉
Python Requests анализ запроса

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

Если открыть .request, можно просмотреть PreparedRequest.

Проверка PreparedRequest открывает доступ ко всей информации о выполняемом запросе. Это может быть пейлоад, URL, заголовки, аутентификация и многое другое.
Использование time.sleep() в threading

Python Logging Cookbook является хорошим примером использования time.sleep(). Модуль логирования logging является потоко-безопасным, поэтому в данном примере он будет полезнее, чем операторы print().

Здесь для создания двух потоков используется модуль Python threading. Также создается объект входа, что будет вводить threadName в stdout. Затем начинаются оба потока и инициируется цикл для каждого входа из главного потока. Для фиксирования пользователя используется KeyboardInterrupt при нажатии ^Ctrl+C.
Использование Event.wait() в многопоточности Python. 1 ч.

Модуль threading предоставляет Event(), которого можно использовать как time.sleep(). Однако преимущество Event() в том, что он более отзывчив. Причина в том, что когда событие установлено, программа сразу выходит из цикла. В Python с time.sleep() коду надо будет подождать завершения вызова sleep() до выхода из потока.
Использование Event.wait() в многопоточности Python. 2 ч.

Причина, по которой здесь лучше использовать wait() в том, что он не блокируется, в то время, как time.sleep() блокируется. Это значит, что при использовании time.sleep() вы заблокируете выполнение основного потока, пока тот будет ждать завершения вызова sleep(). wait() решает данную проблему.

Затем устанавливаются циклы для проверки, настроено ли событие event. Если это не так, тогда код выведет сообщение и немного подождет перед повторной проверкой. Для установки события можно воспользоваться комбинацией ^Ctrl+C. Как только событие установлено, worker() вернется, и цикл оборвется, завершив программу.
С 5 по 7 августа, в 19:00 по московскому времени пройдёт бесплатный интенсив по мобильной разработке на Android. Вы изучите специфику этой сферы, на практике научитесь разрабатывать структуру приложения, верстать и писать код.

Регистрируйтесь: https://clc.am/rpi7FQ

👨‍💻 Вас ждут 3 дня вебинаров от разработчика компании Arcadia, преподавателя программирования с 12-летним стажем Дениса Александрова.


Что будет на интенсиве?

💡 Введение в мобильную разработку.
💡 Освоение актуальных инструментов разработки.
💡 Обучение программированию на Kotlin и написанию нативного кода для приложений.
💡 Настройка архитектуры и интерфейса.
💡 Написание и запуск приложения с помощью Android Studio, Jetpack Compose.

🎁 Всех участников ждут подарки! Тем, кто выполнит домашнее задание, дарим сертификаты на 15 000 рублей на любой курс Skillbox, подборку полезных материалов и электронную книгу от издательства «МИФ».

Ждём вас в прямых эфирах!
Примеры использования модуля os в Python

os.chdir() и os.getcwd()

Функция os.chdir позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии.

Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать os.getcwd(). Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE.

После этого мы изменили папки, при помощи os.chdir().