29 May 2024, 15:07 UTC146 views11 reactionsread 10 August 2026 Когда много менеджеров контекста
(Под "менеджерами контекста" здесь подразумеваются экземпляры классов с реализованными методами __enter__ и __exit__)
Бывает так, что нужно использовать несколько менеджеров контекста, например, открыть несколько файлов, подключений к БД и курсоров. Не всегда их можно создать в одном блоке with и приходится делать вложенные:
with open('config.json', 'r') as file:
config = json.l…
👍11
Signed Андрей Чагочкин
24 May 2024, 14:26 UTC153 views7 reactionsread 10 August 2026 Функция iter
Встроенная функция iter() используется для создания итераторов и всем знакома. Под капотом она вызывает метод __iter__() объекта и возвращает результат.
Но у неё есть вариант вызова с двумя аргументами: callable и sentinel. В этом случае она вернёт итератор, который на каждой итерации будет вызывать функцию callable пока она не вернёт sentinel.
Это может быть удобно тогда, когда объект не поддерживает…
👍7
Signed Андрей Чагочкин
24 May 2024, 14:04 UTC123 views5 reactionsread 10 August 2026 Многострочная документация
1. Первая строка содержит краткое описание модуля, класса, функции и др., начинается сразу после """, заканчивается точкой.
2. Отделена от следующих абзацев пустой строкой.
3. Закрывающие кавычки на отдельной строке.
В многострочной документации в т.ч. описываются аргументы функции/метода, исключения и условия, при которых они возникают, возвращаемые значения и т.п. Для их описания есть н…
👍5
Signed Андрей Чагочкин
20 Aug 2020, 07:25 UTC423 views1 reactionsread 10 August 2026 Однострочная документация
К однострочной документации предъявляются следующие требования:
1. Должна находиться на одной строке, без пустых строк до и после текста.
2. Нужно использовать тройные кавычки (""").
3. Должна быть фраза c точкой в конце.
4. Не надо дублировать объявление функции/класса/метода.
Приведу примеры документирования, нарушающие эти соглашения:
1. Лишние переводы строк:
def random():
"""
…
👍1
Signed Андрей Чагочкин
18 Aug 2020, 14:33 UTC303 views1 reactionsread 10 August 2026 Документирование кода
Многим python-разработчикам знакомо соглашение о стиле кодирования PEP-8. Для проверки кода на соответствие этому соглашению созданы статические анализаторы (например, pycodestyle). Также есть и ПО для автоматического форматирования кода (black и др.).
О написании строк документации в PEP-8 сказано лишь то, что строки документации нужно писать для всех публичных модулей, функций, классов и мет…
👍1
Signed Андрей Чагочкин
13 Mar 2020, 02:49 UTC338 views1 reactionsread 10 August 2026 Модуль textwrap
В стандартной библиотеке Python есть модуль textwrap, содержащий простые, но в то же время полезные инструменты для работы с текстом. Приведу здесь их краткое описание:
wrap(text, width=70, **kwargs)
Разбивает строку text так, чтобы в полученном в результате списке строк длина каждой из них не превышала width символов.
fill(text, width=70, **kwargs)
Делает то же самое, что и wrap, только результат …
👍1
Signed Андрей Чагочкин
11 Jun 2019, 11:06 UTC431 views1 reactionsread 10 August 2026 itertools.groupby()
В модуле itertools есть полезная в некоторых ситуациях функция groupby(). Она позволяет сгруппировать последовательности элементов по какому-либо признаку (ключу). При этом функция работает как с коллекциями (кортежи, списки и др.), так и с итераторами/генераторами. Следует отметить, что элементы в исходной последовательности должны быть упорядочены по ключу ☝🏻 Для формирования значений ключа в ф…
👍1
Signed Андрей Чагочкин
7 Feb 2019, 12:07 UTC456 views1 reactionsread 10 August 2026 Django ORM: проверка на prefetch_related
Метод prefetch_related позволяет загрузить связанные через обратную связь объекты модели.
class Person(models.Model):
name = models.CharField(...)
class Employee(models.Model):
person = models.ForeignKey(
Person,
related_name='employees',
)
job = models.CharField(...)
Для таких моделей при финализации QuerySet-а
persons = Person.objects.prefetch_related(
…
👍1
29 Dec 2018, 04:48 UTC431 views1 reactionsread 10 August 2026 Python: функции attrgetter, itemgetter и methodcaller
Часто возникает необходимость применения к последовательности объектов функции, извлекающей атрибут объекта или вызывающей его метод, либо возвращающей элемент массива или словаря. Например, в функциях filter, sorted, map и др.
Почти всегда это делается подобным образом:
map(
lambda day: (day.year, day.month, day.day),
dates
)
В модуле operator стандар…
👍1
18 Dec 2018, 08:45 UTC414 views1 reactionsread 10 August 2026 Django: select_related и prefetch_related
Часто приходится слышать о том, что select_related предназначен для связей <один/многие>-к-одному (ForeignKey, OneToOneField), а prefetch_related — только для связей <один/многие>-ко-многим (ManyToOneRel, ManyToManyField). Вторая часть этого утверждения верная, но не полная, т.к. prefetch_related может использоваться для тех же связей, что и select_related, только на уровне …
👍1
18 Oct 2018, 10:47 UTC346 views1 reactionsread 10 August 2026 Команда allvirtualenv из virtualenvwrapper
Если есть необходимость выполнить какую-либо команду во всех виртуальных окружениях, созданных с помощью virtualenvwrapper, то для этого подойдет команда allvirtualenv.
Например, обновить pip:
allvirtualenv pip install pip -U
Или посмотреть версии интерпретатора во всех окружениях:
allvirtualenv python -V
👍1
8 Oct 2018, 14:53 UTC383 views1 reactionsread 10 August 2026 Порядок указания декораторов
При использовании сразу нескольких декораторов порядок их следования, в зависимости от их реализации, может иметь значение.
Напомню, что объявление функции вида
@d1
@d2
def f():
pass
аналогично такой записи:
def f():
pass
f = d1(d2(f))
Так вот в зависимости от того, в каком порядке указываются декораторы, результат может быть различным (а может и не быть 🙂). Для примера рассмо…
👍1
Showing the 12 most recent of 20 posts we hold for @yet_another_python_tips. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.