Python | Программирование
9.87K subscribers
1.82K photos
2 videos
139 files
1.53K links
Python без границ для всех

Владелец, реклама @Ak_Mihail

Преобрести рекламное размещение: https://telega.in/c/Python_libr
加入频道
📌 Асинхронная замена requests

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

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

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

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

#урок
🧩 Топ-16 Python-приложений в реальном мире.

• За последние несколько лет технологии вокруг нас поменялись почти во всех аспектах. Мы живем в мире, где во главе угла стоит программное обеспечение, а за почти любой службой стоит какая-нибудь строчка кода. Индустрия путешествий, банкинг, образование, исследования, военная сфера — лишь немногие из тех, кто полагается на ПО.

• Любой софт написан на каком-то языке программирования. А число последних лишь растет. Однако одним из самых популярных в мире на сегодня является Python. В этой статье рассмотрим примеры реальных приложений, работающих на этом языке.

🧷 https://pythonru.com/baza-znanij/primery-programm-na-python

#Статья
📌 Алгоритм бинарного поиска

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

Он намного быстрее чем простой проход по списку (для тех, кто шарит: O(log n) vs O(n)) и, к тому же, встроен в Python (модуль bisect).

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

#урок
📌 __init__ vs __new__

__new__(cls)
создаёт экземпляр класса. Это метод, который вызывается когда пишем AnyClass().

__init__(self) инициализирует класс, то есть задаёт все переданные значения.

Вызывается после __new__ только если метод вернул такой же тип, что и класс, в котором он определён

#урок
📌 Что такое __all__ ?

Вот вы написали from module import * и к вам в код попало куча объектов, которые используются только внутри модуля.

Избавиться от мусора можно, если записать в __all__ список имён всех объектов (классы, функции, переменные), которые надо импортировать.

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

#урок
📌 Делаем вычисления более точными

Поскольку люди не могут перевести некоторые числа с плавающей запятой в двоичный вид, мы получаем это: 0.1 + 0.2 = 0.30000000000000004.

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

И это всё тот же float. То есть вы можете складывать значения, вычитать, умножать, делить, сравнивать, и так далее.

#урок
📌 func.__defaults__

Значения по умолчанию генерируются только один раз и сохраняются в переменной func.__defaults__, что и приводит к странному поведению.

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

#урок
📌 Лучше чем Pandas & NumPy

agate
используется для анализа данных, их обработки и вывода (в виде графиков, например). Раньше библиотеку знали как journalism.

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

Позиционирует она себя как упрощённая альтернатива NumPy и Pandas. Вы выполняете те же задачи, но при этом пишите меньше и код становится в разы понятнее.

#урок
📌 Модуль inspect

С ним вы окунётесь в глубины Python и познаете принципы его работы... Почти. На самом деле он просто вытаскивает данные из объекта или делает какие-то проверки.

signature(obj) — то, как у функции определены аргументы. Используйте, если не понимаете, почему float(x='1') выдаёт ошибку в Python 3.9.

inspect.getmro(class) — если нужно узнать иерархию классов.

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

#урок
📌 __getattr__ и __getattribute__

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

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

#урок
📌 Метод str.split(sep)

Он разделяет строку по sep, но у него есть свои особенности.

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

Если sep передан, то разделители не группируются, а значит на месте повторов образуется ''. Также, разделение пустой строки всегда вернёт [''].

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

#урок
📌 Это спасёт вас от кучи багов

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

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

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

#урок
📌 Его надо знать обязательно!

Речь пойдёт про collections — встроенный модуль, который сильно упростит вашу жизнь.

Он посчитает кол-во элементов (Counter), подставит значение на место несуществующего ключа (defaultdict) и многое другое.

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

#урок
📌 Модуль heapq

Нас интересуют только две функции: nlargest() и nsmallest(). Они позволяют получить n самых больших/маленьких значений в iterable.

В большинстве случаев функции быстрее чем sorted(iterable)[:n]. Их использование можно заметить в Counter.most_common().

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

#урок
📌 Что такое NaN

Not a Number
(не число) — состояние float, при котором устройство не смогло посчитать какое-то выражение.

Компьютер не в силах (как и мы) поделить 0 на 0 или узнать asin(2), поэтому возвращает NaN.

Его особенностью среди других чисел является то, что оно не равно самому себе.

#урок
📌 Утиная типизация

«Если оно выглядит как утка и крякает как утка, то, наверное, это утка» — примерно так определяют объекты динамические языки программирования (Python, JS).

То есть мы смотрим не на объект, а на его атрибуты. И если там, к примеру, есть __iter__(), то объект считается итерируемым.

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

#урок
📌 Метод call

Позволяет вызывать класс точно так же, как и функцию. То есть вы можете написать так: AddClass()(1)(2).

В основном используется для создания декораторов, которым надо передать какое-либо значение.

#урок
📌 Python Roadmap

Информации очень много и «потеряться» в ней довольно легко. Эта карта поможет вам систематизировать знания и изучать всё в порядке возрастания сложности.

#roadmap