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
Что выведет код?
Anonymous Quiz
8%
[3]
9%
[8]
44%
[7]
39%
Error
Функция zip_longest()

Функция zip_longest() модуля itertools создает итератор, который объединяет элементы из каждой итерируемой последовательности iterables в кортежи.

Отличие функции zip_longest() от встроенной функции zip() заключается в том, что zip() останавливается по исчерпании самой короткой входной последовательности и отбрасывает несопоставимые значения более длинных итераций, в то время как zip_longest() работает пока самая длинная итерация не будет исчерпана, а пропущенные элементы заполняются значением fillvalue.
Что выведет код?
Anonymous Quiz
14%
6
49%
9
8%
7
28%
Error
Функция nlargest()

Функция nlargest() модуля heapq возвращает список с n самыми большими элементами из набора данных, определенного с помощью итерируемой последовательности iterable.

Аргумент key, если он указан, определяет функцию с одним аргументом, которая используется для извлечения ключа сравнения из каждого элемента в итерируемой последовательности iterable, например key=str.lower. Значением по умолчанию является None, что означает сравнение элементов напрямую.

Функция nlargest() эквивалентна вызову sorted(iterable, key=key, reverse=True)[:n].

Работает лучше для маленьких значений n. Для больших значений более эффективно использовать функцию sorted(). Также, когда n=1, более эффективно использовать встроенную функцию max().

Если требуется повторное использование функции heapq.nlargest(), рассмотрите возможность преобразования последовательности iterable в реальную кучу.
Функция hasattr()

Функция hasattr() проверяет существование атрибута с именем name в объекте object. Возвращает True, если атрибут с именем name существует, иначе False.

Реализация функция hasattr() основывается на вызове функции getattr() с последующей проверкой на предмет брошенного ей исключения AttributeError.
Класс weakref.WeakKeyDictionary()

Класс weakref.WeakKeyDictionary() представляет собой словарь, который слабо ссылается на ключи. Записи в словаре будут отброшены, если нет более сильной ссылки на ключ.

Такое поведение можно использовать для связывания дополнительных данных с объектом, принадлежащим другим частям приложения, без добавления атрибутов к этим объектам. Это может быть особенно полезно с объектами, которые отменяют доступ к атрибутам.
Модуль bisect

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

Модуль называется "bisect", потому что он использует базовый алгоритм деления пополам для выполнения своей работы. Исходный код может быть наиболее полезным в качестве рабочего примера алгоритма.
Функция super()

Функция super(), возвращает объект объект-посредник, который делегирует вызовы метода родительскому или родственному классу, указанного type типа. Это полезно для доступа к унаследованным методам, которые были переопределены в классе.
Что выведет код?
Anonymous Quiz
11%
x
5%
z
29%
a
16%
c
39%
Error
Функция frozenset

Функция frozenset это неупорядоченный набор отдельных хешируемых объектов. Frozenset – неизменяемый набор, поэтому его содержимое не может быть изменено после его создания.

Функция frozenset() используется для создания объекта frozenset.
Метод str.expandtabs()

Метод str.expandtabs() возвращает копию строки str, в которой все символы табуляции t заменяются одним или несколькими пробелами, в зависимости от текущего столбца и заданного размера табуляции tabsize.

Для замены табуляций изначально номер столбца задаётся равным нулю и начинается посимвольный обход строки.

При обходе строки str, если попадается символ табуляции t, то на его место вставляется столько пробелов, что бы текущий номер столбца стал равным позиции следующей табуляции. При этом сам символ табуляции не копируется.

Если встречается символ переноса строки n или возврата каретки r, то он сохраняется в строке, а текущий номер столбца сбрасывается на 0. Любой другой символ копируется без изменений, а текущий столбец увеличивается на единицу.
Модуль gzip

Модуль gzip предоставляет простой интерфейс для сжатия и распаковки файлов, как это делают программы GNU gzip и gunzip.

Сжатие потока данных обеспечивается модулем zlib.

Модуль gzip предоставляет класс gzip.GzipFile(), а также удобные функции gzip.оpen(), gzip.compress() и gzip.decompress(). Класс gzip.GzipFile() читает и записывает файлы формата gzip, автоматически сжимая или распаковывая данные, чтобы они выглядели как обычный файловый объект.

Обратите внимание, что дополнительные форматы файлов, которые могут быть распакованы программами gzip и gunzip, например созданные с помощью команды bash compress и pack, этим модулем не поддерживаются.