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
Как вывести список методов и атрибутов объекта 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.
​​Дизассемблирование 
 
Встроенный модуль dis позволяет декомпилировать написанную вами программу в байт-код Python. 
 
На картинке показана работа этого модуля на примере функции, но такое можно повторить и с классами – в таком случае все его функции будут дизассемблированы.
Какая из строчек кода выведет структуру, отсортированную в порядке увеличения возрастов животных?
Anonymous Quiz
45%
sorted(animals, key='age')
15%
Ни один вариант не является верным, два словаря нельзя сравнивать друг с другом.
35%
sorted(animals, key=lambda animal: animal['age'])
5%
sorted(animals)
​​Метод popitem() 
 
Метод словаря popitem() удаляет последнюю вставленную пару «ключ-значение» указанного ключа и возвращает эту пару.
Какая из перечисленных инструкций выполнится быстрее всего, если n = 10**6?
Anonymous Quiz
18%
a = list(i for i in range(n))
29%
a = [i for i in range(n)]
38%
a = (i for i in range(n))
15%
a = {i for i in range(n)}
​​geopy 
 
Программистам может быть сложно ориентироваться в географии. Однако модуль geopy всё упрощает: 
 
$ pip install geopy 
 
Он работает путём абстрагирования API разных сервисов геокодирования. Этот модуль даёт возможность узнать полный адрес места, его долготу и широту и даже высоту. 
 
Также в нём есть полезный класс Distance. Он высчитывает расстояние между двумя местами в удобной единице измерения.
​​Кэширование функций 
 
Кэширование может сэкономить время, когда связанная с вводом или выводом функция периодически вызывается с одинаковыми аргументами. Раньше приходилось создавать свою реализацию, но в Python 3.2+ появился декоратор lru_cache, который позволяет нам быстро кэшировать и вскрывать возвращаемые значения функции. 
 
Давайте реализуем калькулятор чисел Фибоначчи с использованием кэша. Советую попробовать запустить любую рекурсивную функцию с кэшированием и без него, прирост в скорости замечается сразу.
​​Библиотека sh 
 
Любой программист должен знать bash - язык для взаимодействия с линуксом. Основы знают все, ведь по-другому не запустить программу на сервере или не установить нужную библиотеку. Данный модуль позволяет использовать bash прямо в Python коде. 
 
Библиотеку требуется установить: 
 
pip install sh 
 
Если вдруг вы забыли как написать что-то на Python, то всегда можете использовать bash.
​​Not a Number 
 
В модуле math есть особый объект, который называется NaN (Not a Number). 
 
Такие объекты не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.