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
​​Выводим положение курсора

Будем использовать библиотеку 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 и так далее.
​​Pyperclip 
 
Модуль pyperclip имеет функции copy() и paste(), которые позволяют отправлять текст в буфер обмена вашего компьютера и получать его оттуда. 
 
Таким образом, можно прямо через код копировать вывод программы в буфер обмена вместо того, чтобы делать это вручную.  
 
Установить этот модуль можно привычным способом через пакетный менеджер pip.
​​Символы Юникода 
 
Добавлять юникод-символы в строковые литералы можно не только с помощью их номеров, но и по их названиям. 
 
Более того, такая запись символов юникода совместима и с f-строками, а это очень удобно.
Как можно более кратко представить эту запись?
Anonymous Quiz
8%
A = Y if Z else Y
75%
A = Y if X else Z
6%
A = X if Z else Y
12%
A = X if Y else Z
​​Комплексные числа в Python 
 
Кроме уже известных вам типов int, float и подобных, в Python существует еще один довольно интересный тип, а именно, complex
 
В Python комплексные числа представлены в виде x + iy. Python преобразует реальные числа x и y в комплексное с помощью функции complex(x,y)
 
Это число можно превратить в строку с помощью str, посчитать его модуль с помощью abs, а также для доступа к его реальной или мнимой части можно воспользоваться функциями real() и imag()
 
Хотя данный тип и является встроенным, для полноценной работы с комплексными операциями понадобится модуль cmath.