Python tricks | Хитрости Питона
5.67K subscribers
2.21K photos
26 videos
1 file
2.52K links
Здесь вы найдете лучшие практики и приёмы, которые используют опытные программисты.

Сотрудничество: @SIeep_Token

Мы на платформе: https://telegram.me/python_tricks

Ссылка на канал: https://t.me/+QayZf6ccsQllZTYy
Download Telegram
​​Преобразование изменяемых данных в неизменяемые

Неизменяемые данные, в противоположность изменяемым, после создания остаются неизменными. Посмотрите, как можно преобразовать изменяемый тип данных в неизменяемый.
​​Контейнеры

Контейнеры — это объекты, содержащие значения данных. Они поддерживают тесты на членство, что означает, что вы можете проверить, существует ли значение в контейнере. Кроме того, контейнеры являются итерируемыми объектами. Списки, множества, словари, кортежи и строки — все это контейнеры.
​​Поиск классов Python

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

Вы можете вызвать функцию type() для любого объекта Python, чтобы узнать его класс. Например, класс массива numpy на самом деле называется ndarray (для n-мерного массива).
​​Назначаем функцию на нажатие клавиш

Создаем функцию. Далее нам необходима библиотека keyboard. Используем функцию add_hotkey. В качестве аргумента указываем комбинацию и функцию.
Установка библиотеки командой pip install keyboard
​​Выводим положение курсора

Будем использовать библиотеку mouse, которую установим командой pip install mouse в терминале.

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

Модуль math обеспечивает простой способ вычисления факториала любого положительного целого числа. В нем есть предопределенный метод factorial(), который принимает целое число в качестве аргумента и возвращает факториал числа.
​​Создание словаря из набора ключей

Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).

Однако класс dict имеет удобный метод fromkeys, который был создан специально для таких случаев.
​​Проверка возможности вызова

Поговорим о возможности вызова того или иного объекта. Для проверки возможности вызова воспользуемся встроенной функцией callable. Она возвращает True или False в зависимости от объекта. Под вызовом подразумеваются ( ).
​​Получаем и задаем лимит рекурсии 

В Python не оптимизируется хвостовая рекурсия, из-за чего зачастую возникает RecursionError во время создания рекурсивных алгоритмов. 

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

И вообще лучше стараться использовать не рекурсию, а обычные циклы, но это вы и так сами знаете.
​​Создаем список в 1 строку

Одна из наиболее базовых задач в питоне - создание списков на основе уже имеющихся массивов данных, при этом стандартный метод занесения достаточно громоздок.
Специально для сокращения количества строк и приданию Вашему коду лаконичного вида в питоне есть возможность создать список в 1 строку по принципу
[объект for i in итерируемый объект if условие]
Необходимо собрать и вывести все уникальные слова из строки рекламного текста. Какой из перечисленных типов данных Python подходит лучше всего?
Anonymous Quiz
18%
кортеж (tuple)
22%
список (list)
48%
множество (set)
13%
словарь (dict)
​​True или не True, вот в чем вопрос

В питоне True и False - объекты класса bool, при этом к этому типу можно преобразовать объект любого класса так, что нулевой(пустой объект) равен False, а что угодно другое преобразуется в True
Пример для int: 
bool(1) -> True
bool(-1) -> True
bool(0) -> False
Пример на списках:
bool(['Smthng']) -> True
bool([]) -> False

Этот факт дает нам возможность составлять условия самыми разными способами, примеры основных выражений приведены ниже
Как вывести список методов и атрибутов объекта x?
Anonymous Quiz
28%
help(x)
27%
info(x)
4%
?x
41%
dir(x)
​​Продолжим об условиях в Python

Как мы помним, любой исход проверки программой воспринимается как тип bool.
Но стоит так же знать, что при любой арифметической операции с ним он преобразуется в формат int по принципу:
True -> 1
False -> 0
Это позволяет нам разбить выражение на части и обрабатывать объект по разному в зависимости от реализованного условия.
Для примера сегодня четные элементы вернём без преобразования, а нечётные увеличим на 1

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

Часто от программиста требуется написать код, который должен выполняться в определенный промежуток времени или по расписанию. Для решения этой проблемы существует много решений, но одно из них — это библиотека aiocron.

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

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

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

В примере видим, как символы переноса строки "\n" и табуляции "\t" заменяются на обычные пробелы, а символ "\r" удаляется из строки полностью.
​​Функция reduce

Модуль functools позволяет хорошо раскрыть функциональные возможности Python. Например, в functools есть интересная функция reduce, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.

Таким образом, в примере выше reduce умножает 1 на 2, затем результат этого умножения на 3 и так далее.