Just Python
10.2K subscribers
4.39K photos
11 videos
4.38K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Строки на несколько строк

Бывают ситуации, когда строку лучше разделить, чтобы она легче читалась, но при этом сохранить её содержимое в полном порядке. В таком случае у нас есть три варианта:
Использовать косую черту (/). Тогда мы переносим выражение на новую строку и ни о чем не заботимся.
Использовать скобки. Смотрите лучше пример. Никаких + использовать не надо, строки сами объединяться.
Использовать тройные кавычки. Внутри тройных кавычек все останется именно таким, как оно есть.

#theory // Just Python
IEEE 754

Это стандарт, который говорит как расставить нолики и единички, чтобы получить float. Он позволяет нам писать 0.3, но из-за него же 0.1 + 0.2 != 0.3.

На эту тему тут был ролик, а я пока расскажу про странные моменты, которые связаны с этим стандартом.

#theory // Just Python
Интерпретатор умный

Перед запуском он проходится по файлу и смотрит на первые значения переменных (a = "string"), которые потом подставляет на месте повторений (если это неизменяемые типы данных).

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

#theory // Just Python
Хороший Python

В первом тесте Python получает список, выполняет функцию join (объединяет строки в последовательности) и создаёт новую строку.

Но вот во втором случае Python сразу понимает что ''.join(a.split()) вернёт a, поэтому не выполняет ни split, ни join, а подставляет ту же строку.

#theory // Just Python
Фокус со срезом

Срезы позволяют нам получить подмножество элементов (исключение). Работают они с последовательностями (строки, списки, кортежи, range).

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

#theory // Just Python
Оператор with

Был придуман, чтобы заменить огромные try/except/finally при работе с файлами/соединениями на более простую конструкцию.

Он самостоятельно выполняет обязательные функции по завершению работы с классом после выполнения всех действий. Об этом в PEP 343.

Оператор использует __enter__ в самом начале, например, для открытия файла. После выполнения всех операций (или если возникла ошибка), используется __exit__.

#theory // Just Python
Это спасёт вас от кучи багов

Просто знайте, что round(x) округляет x до ближайшего чётного числа, а не так, как мы привыкли (3.5 => 4; 2.5 => 3).

Если вам нужно, чтобы 2.5 округлялось до трёх, то посмотрите в сторону decimal с настройкой ctx.rounding = ROUND_HALF_UP

Документация

#theory // Just Python
try/except

Эта конструкция используется для «ловли» ошибок и их обработки. Например, если пользователь неправильно ввёл число, попросить его сделать это заново.

try — здесь хранится код, который может выдать ошибку.

except Exception — если появилась ошибка, будет выполняться код из этого блока.

else — ошибок не было? Отлично, значит после try выполняем этот блок.

finally — выполняется всегда. Выдало ошибку, не выдало ошибку, функция использовала return — не имеет значение.

#theory // Just Python
Утиная типизация

В языках без явного указания типа (Python, JS) есть такое понятие как утиная типизация. Описывается так: «Если оно выглядит как утка и крякает как утка, то, наверное, это утка».

Утиный стиль программирования смотрит не на тип объекта, а на его атрибуты. Например, наличие iter() означает, что объект итерируемый.

#theory // Just Python
Всё просто

for i in range(10) говорит нам пройтись по списку и сохранить значение каждого элемента в i.

В нашем случае мы задаём значения кортежу (i, some_dict[i]) = (0, 'w'), а это то же, что и i = 0; some_dict[i] = 'w'.

Можно заметить выражение some_dict[i] = 'w', которое и меняет словарь.

#theory // Just Python
x.as_integer_ratio()

Метод предоставляет десятичную дробь в виде пары «числитель, знаменатель». То есть поделив a на b вы получите нужное число.

Но им лучше не пользоваться из-за стандарта IEEE 754 (ссылка на пост), а импортировать decimal (см. пример на фото).

#theory // Just Python
Приоритеты

Первым делом выполняется умножение, а только потом сложение. Но в Python всё несколько сложнее, ведь там операторов больше, чем в школьной математике.

В документации есть раздел по «значимости» каждого оператора (+x, @, ==, |, даже await).

#theory // Just Python
Proxy Checker

Чекер, разработанный на Python 3 для проверки прокси.

Получаемые данные:
- тип (HTTP, SOCKS4, SOCKS5)
- время ответа (в секундах)
- анонимность (анонимная или прозрачная)
- страна
- город
- код страны

#theory // Just Python
isinstance(object, classinfo)

Функция проверяет, относится ли объект к типу classinfo. Возможно это тот самый classinfo, а может дочерний тип.

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

Документация

#theory // Just Python
Получаем курс валют

Узнать цену биткоина в $ или получить стоимость доллара в рублях. Всё это можно сделать с помощью forex-python.

Установка: pip install forex-python

На самом деле это просто клиент для этого сайта. Список доступных валют можно посмотреть тут. Также модуль может конвертировать одну валюту в другую.

Документация
Github

#theory // Just Python
Асинхронная замена requests

С помощью aiohttp мы можем не только составлять запросы, а также создавать HTTP-серверы.

Установка: pip install aiohttp
Для быстрой работы DNS: pip install aiodns.

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

Документация

#theory // Just Python
Ещё не надоело работать с os.path?

С Python 3.4 есть отличная альтернатива — pathlib. Он упрощает работу с путями и добавляет новые функции.

Помимо того, что вы теперь можете удобно составлять пути, так ещё и работать с ними (rename(), rmdir(), etc).

К тому же пути нормально работают на Windows и Linux. А если ваш код всё ещё использует os, то pathlib совместим с этим модулем.

#theory // Just Python
Упрощаем работу с SQL

Автор FastAPI придумал SQLModel, который упрощает работу с базами данных. Он объединяет в себе Pydantic и SQLAlchemy.

Установка: pip install sqlmodel

Таким образом работу с движком БД мы перекладываем на SQLAlchemy, а обработку данных, проверку и перевод в нужный тип на Pydantic.

Кстати, библиотека хорошо работает с fastapi. Вряд-ли это из-за того, что автор один и тот же.

Документация

#theory // Just Python
Знаете, как работает словарь?

Лучше не знать. Начнём с того, что он принимает только хешируемые объекты, то есть те, у которых есть метод __hash__. Это str, tuple, frozenset и другие неизменяемые объекты.
После их запихивают в хеш-таблицу (есть на эту тему классная статья). Если просто, то это «гардеробная». Вы даёте номерок и вам выдают вещь.

#theory // Just Python
Перемещение файлов в Python

Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil.

Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу.

В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.

#theory // Just Python