Just Python
قناة بسيطة
🐍Простое изучение Python. Ссылка: @Portal_v_IT Сотрудничество: @oleginc
إظهار المزيد9 696
المشتركون
-624 ساعات
-217 أيام
-7630 أيام
أرشيف المشاركات
9 696
❗️Появилась инструкция с помощью которой всего за 5 шагов можно обойти замедление YouTube.
Работает абсолютно для любого устройства и без VPN.
Инструкция https://t.me/+yaL8W4GBCaFjNWU0
9 696
Context Manager
Помните про with? Там рассказывалось про его использование с классами, но ничто не мешает использовать его с функциями. Только нужна библиотека contextlib.
Чтобы функция могла работать с with, вы добавляете
@contextmanager или @asynccontextmanager, в зависимости от того, нужно ли вам асинхронное выполнение.
Только ещё вам нужно yield, чтобы вернуть объект, с которым будет работать with и при этом только приостановить работу функции. Подробнее.
#theory // Just Python9 696
Правильная сортировка символов по алфавиту
Буквы сортируются не в алфавитном порядке, а по позиции в таблице UTF-16, получить значение которого можно с помощью
ord(x).
В верхнем регистре символы имеют меньшее значение, чем в нижнем, поэтому они оказались в начале списка.
#theory // Just Python9 696
Упрощаем поиск багов с помощью assert
Функция поиска площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? Самый быстрый способ это проверять — использовать assert.
Если оператор получает на первый аргумент False, то выводит AssertionError с текстом из второго аргумента (если таков имеется).
Чтобы убрать проверку, добавьте флаг -O при запуске приложения:
python3 -O foo.py. Подробнее в документации.
#theory // Just Python9 696
Узнай, сколько лет твоему Telegram аккаунту и заработай токены!
Появился бот, который вычисляет возраст телеграм-аккаунта и начисляет токены $DOGS.
Токен уже ожидает листинг в ближайшие дни!
Переходи по ссылке и забирай бонусные баллы за наш олдовый аккаунт, приглашай друзей и повышай свой баланс, чем старше аккаунт, тем больше баллов.
Bark! Bark! – Dogs 🦴
9 696
Менять списки во время итерации плохая идея, и вот почему:
С помощью итератора мы можем пройтись по элементам списка, так давайте напишем свой итератор и посмотрим, что там происходит внутри.
Как мы видим, поскольку удалили 1 из списка, все элементы сместились влево и на второй позиции уже будет не двойка а тройка.
Её тоже удаляем и получаем
[2, 4]. Поскольку дальше двигаться некуда, итератор останавливает свою работу.
#theory // Just Python9 696
Принцип DRY(не повторяйся)
Don't repeat yourself («не повторяйся») — этот принцип означает, что стоит избегать дублирования кода или данных.
Внесение изменений в такой код становится в разы сложнее. Что если вы забыли добавить фичу в другом файле? Этот вопрос не даст вам покоя.
Следование принципу приводит проект к модульной архитектуре с чётким разделением между бизнес-логикой и программными классами.
#theory // Just Python
9 696
Про метод
str.split(sep)
Все знают, что он разделяет строку по sep, но у него есть свои особенности. И первое, это если sep не указан, то есть None.
Тогда ряды пробелов рассматриваются как один разделитель и, к тому же, в результате не будет пустых строк в начале и в конце.
Если sep передан, то разделители не группируются, а значит на месте повторов образуется ''. Также, разделение пустой строки всегда вернёт [''].
#theory // Just Python9 696
Про десятичные числа
В Python3 к цифрам относится всё, что можно считать цифрами, поэтому код с теста не выдал ошибки.
Это, например, '٠' (арабская ноль). Зачем их добавили? На эту тему есть интересная история, связанная с интернетом.
#theory // Just Python
9 696
Почему так на***?
reversed(x) позволяет пройтись по объекту в обратном порядке. То есть в нашем случае — 3, 2, 1. Но это итератор, а значит пройтись по нему можно только 1 раз.
Если попробовать получить значения ещё раз, то генератор просто ничего не вернёт. Вызывается sorted([3, 2, 1]) == sorted([]) и, понятное дело, мы получаем False.
#theory // Just Python9 696
Готовы к взрыву мозга?
Когда вызывается id(Ok()), создаётся экземпляр класса, функция получает адрес в памяти и выкидывает объект (то есть удаляет его).
Во второй раз происходит то же самое, но на месте, где только что был предыдущий объект появляется новый, точно такой же. И в итоге мы получаем один и тот же адрес.
#theory // Just Python
9 696
Как ограбить банк на 80.000 легально в июле 2024
1. Зайти на канал «Это Грабёж» и забрать 15.000 в закрепе за вход в приложение банка
2. Через месяц радоваться прибыли с кешбэка и скрытых акций на +65.000
3. Через год получить пять зарплат сверху, пользуясь лазейками Альфы + Сбера + ВТБ
20.000 человек уже отблагодарили админа в комментах — этот перформанс надо видеть.
Подпишись:
@etogrаbezh
9 696
Перейдём к основам-основам
В Python есть два типа типов: изменяемые (list, set, dict) и неизменяемые (bool, int, float, complex, tuple, str, frozenset).
Зачем такие сложности? Неизменяемые типы сохраняют данные, не позволяя другим объектам на них повлиять.
#theory // Just Python
9 696
0x6e 0x75 0x6d 0x65 0x72 0x61 0x6c 0x20 0x73 0x79 0x73 0x74 0x65 0x6d
В Python мы можем использовать другие системы счисления, просто добавив приставку.
0x для шестнадцатеричной, 0o для восьмеричной и 0b для двоичной системы счисления.
#theory // Just Python
9 696
Несколько фишек Python
1. Мы можем передать кортеж функции isinstance, тогда она будет проверять, относится ли x к одному из этих типов.
2. round может округлять в обратную сторону. То есть не только до дестых, но и до десяток.
3. В один except можно записывать несколько ошибок на обработку.
#theory // Just Python
9 696
Правила документации
class Post:
"""На первой строке краткое описание объекта. После идёт пустая строка (это обязательно).
После идёт подробное объяснение. Кто он,
что он делает и какие параметры принимает.
Документировать можно в несколько абзацев.
Писать доки можно для всего: функции, класса, модуля.
Но если вы мне не доверяете, можете почитать PEP257,
там разработчики рассказывают, как объяснять код.
"""
#useful // Just Python9 696
isdecimal() vs isdigit() vs isnumeric()
Эти три метода str используются для определения, является ли строка числом, но у них есть небольшие отличия:
str.isdecimal() — проверяет, является ли строка только набором цифр (1-9). В то время как:
· str.isdigit() вернёт True, даже если в строке есть надстрочные и подстрочные цифры (² или u00B2).
· str.isnumeric() вернёт True, даже если это дробь (½ или u00BD).
#theory // Just Python9 696
Тесты в документации
Такой подход интересен тем, что позволяет другому программисту понять как работает функция в определённых ситуациях, а вам — протестировать её работу.
Реализуется подобная фича с помощью встроенного модуля doctest. Он ищет текста, которые выглядят как интерактивные сеансы Python (>>>, ... и подобные символы).
Вы можете запускать тесты так же, как в примере, а можно с помощью терминала:
python -m doctest -v example.py.
#theory // Just Python9 696
Фокус с type
Все мы знаем, что type позволяет определять тип данных (строка это или, может, список). Но у него есть другая функция — создание типа.
Таким образом мы можем во время выполнения создать новый класс и пользоваться им.
#theory // Just Python
9 696
Парсим сайты
Нужно узнать заголовок последней новости? Отслеживать цену товара? Или автоматически находить решение на Stackoverflow? Вам поможет Beautiful soup.
Установка:
pip install beautifulsoup4
Модуль может парсить HTML и XML файлы и находить на них нужную информацию. Например, найти заголовок (тег h1) или все ссылки на сайте.
Функционал довольно большой и весь список можно найти в документации.
#theory // Just Python