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
​​Функция 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). 
 
Такие объекты не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.
​​Аргументы командой строки 
 
При запуске программ через терминал можно указывать аргументы через пробел. В Python список этих аргументов хранится в переменной argv во встроенном модуле sys
 
Первым элементом всегда является имя запускаемого скрипта, вторым и далее — непосредственно сами аргументы.
извините, забыл сначала картинку выложить :)
​​Функция reduce() 
 
Функция reduce() модуля functools кумулятивно применяет функцию function к элементам итерируемой iterable последовательности, сводя её к единственному значению. 
 
Параметры: 
  function - пользовательская функция, принимающая 2 аргумента, 
  iterable - итерируемая последовательность, 
  initializer - начальное значение.
​​Сортировка списка

Метод list.sort() сортирует элементы списка на месте восходящей способности. Чтобы настроить поведение сортировки по умолчанию, используйте дополнительный ключ Аргумент, передавая функцию, которая возвращает сопоставимое значение для каждого элемента в списке. С дополнительным логическим Обратный Аргумент, вы можете переключиться с восходящего ( Reverse = false ) до поручения убывания ( Reverse = True ).

В первой строке примера вы создаете список lst отказ затем вы разбираетесь в списке один раз, используя поведение сортировки по умолчанию и один раз, используя индивидуальное поведение сортировки только с первой буквой номера. Затем вы поменяете заказ элементов в отсортированном списке, используя Reverse = True аргумент
С помощью Python нужно записать данные в файл, но только в том случае, если файла ещё нет. Какой режим указать в инструкции open()?
Anonymous Quiz
15%
'x'
37%
Никакой. Нужна предварительная проверка os.path.exists()
41%
'w'
7%
'r'