Тема: python
-
Python 3.10 после окончания поддержки: поиск интерпретаторов и пересоздание окружений
В таблице жизненного цикла проекта Python датой окончания поддержки Python 3.10 указано 1 октября 2026 года. Учтите интерпретаторы, которые действительно используют службы, виртуальные окружения и образы, затем пересоберите и проверьте каждое приложение на поддерживаемой ветке.
-
Проектирование консольной утилиты на Python: argparse, main() и коды возврата
Разместите интерфейс в функции main(argv) -> int, зарегистрированной как консольный скрипт; проверяйте аргументы через type и choices в argparse; следуйте соглашению о кодах возврата (0 — успех, 2 — ошибка использования, 1 — прочий сбой, коды sysexits — только если они задокументированы); выводите результаты в stdout, а диагностику — в stderr; обрабатывайте SIGINT и разорванные каналы (broken pipe).
-
Построение доверительного интервала для медианы, перцентиля или отношения методом bootstrap
Многократно ресэмплируйте исходные наблюдения с возвращением, вычисляйте статистику на каждой ресэмплированной выборке и считывайте интервал из полученного распределения; это даёт оценку неопределённости для медиан, перцентилей, отношений и разностей — там, где не работает ни одна учебниковая формула. Указывайте метод, число ресэмплов и размер выборки и не доверяйте методу для крайних перцентилей на маленьких выборках.
-
Публикация в npm и PyPI: привязка идентичности издателя к одобренным артефактам релиза
Trusted publishing через OIDC избавляет от хранения токенов публикации, но его безопасность по-прежнему зависит от разрешённого рабочего процесса. Отделяйте сборку от публикации, защищайте процедуру одобрения и сверяйте идентификационные данные артефакта, не принимая подтверждение происхождения за заключение об отсутствии вредоносного кода.
-
Тестирование свойств на генерируемых входных данных
Вместо вручную подобранных примеров тест свойств задаёт инвариант и поручает библиотеке генерировать множество входных данных, уменьшая неудачные случаи до минимальных контрпримеров. Hypothesis — эталонная реализация этого подхода для Python.
-
Контекстные менеджеры Python: гарантированная очистка
Оператор with вызывает __enter__ и __exit__ до и после блока, освобождая файлы, блокировки и соединения даже при исключении. contextlib.contextmanager превращает генератор в контекстный менеджер.
-
Docstring, полезные читателям и инструментам
PEP 257 определяет расположение и оформление docstring; единый стиль (Google или NumPy) с однострочным описанием, пояснениями аргументов и возвращаемого значения и перечислением исключений делает их полезными читателям, редакторам и генераторам документации.
-
Числа с плавающей точкой: почему 0.1 + 0.2 не равно 0.3
Двоичные числа с плавающей точкой приближённо представляют большинство десятичных дробей, поэтому арифметика накапливает ошибки округления. Сравнивайте с допусками, аккуратно суммируйте, для денег и счётчиков используйте целые или десятичные типы и выводите достаточно цифр для обратного восстановления.
-
Loading YAML safely
Full YAML loaders can instantiate arbitrary objects from tagged nodes; always use a safe loader, pin the YAML version semantics, and validate the result against a schema before use.
-
Glob pattern dialects: what * and ** mean in .gitignore, .dockerignore, bash, Python and GitHub Actions
The same star and double-star characters mean different things depending on where the pattern is evaluated: a slash-less .gitignore pattern matches at every depth while the same line in .dockerignore only matches at the context root, bash's globstar recursion is opt-in, and Python's fnmatch is not even path-aware.
-
Когда asyncio помогает, а когда — нет
asyncio выполняет в одном потоке множество задач, ограниченных вводом-выводом, приостанавливая их в точках await. Он не ускоряет код, ограниченный вычислениями, а блокирующие вызовы внутри корутин останавливают весь цикл событий.
-
Автоматическое форматирование и линтинг как командное соглашение
Передача оформления форматтеру, а механических проверок линтеру убирает споры о стиле из ревью; EditorConfig, PEP 8 и инструменты вроде Ruff показывают, как закрепить соглашение в репозитории.
-
Protocol classes: structural typing for duck-typed Python
A typing.Protocol declares the methods and attributes a consumer needs; any object that has them satisfies the type without inheriting from it. Define protocols next to the code that depends on them, keep them minimal, and use runtime_checkable only where isinstance is really needed.
-
Поиск утечки памяти по снимкам tracemalloc
Начните трассировку заранее через PYTHONTRACEMALLOC или tracemalloc.start(nframe), сделайте снимок после прогрева и ещё один после N итераций, отфильтруйте шум импортов и изучите compare_to(..., 'lineno'), ища строки, для которых размер растёт пропорционально N. Перейдите к группировке 'traceback', чтобы увидеть вызывающий код.
-
Money and other exact quantities: use Decimal, not float
Binary floating point cannot represent most decimal fractions exactly, so sums of prices drift; the decimal module provides exact decimal arithmetic with explicit rounding, and integers in minor units are an alternative.
-
Выбор между потоками, процессами и asyncio для нагрузки Python
Сначала определите характер горячего пути: для ожидания ввода-вывода подойдут asyncio (много соединений, асинхронные библиотеки) или пул потоков (немного блокирующих вызовов); для вычислений на чистом Python нужны процессы или сборка без GIL; нативный код, освобождающий GIL, может использовать потоки. Ограничивайте каждый пул, явно выбирайте способ запуска процессов и прописывайте завершение работы.
-
Dataclasses for plain records
dataclasses generate __init__, __repr__ and equality from annotated fields; frozen dataclasses give immutable value objects, slots reduce memory, and field(default_factory=...) avoids shared mutable defaults.
-
At what workload does the free-threaded CPython build beat a process pool for a mixed I/O and CPU service?
Open question: the free-threaded build removes the GIL but adds single-threaded overhead and may fall back to the GIL when an unprepared extension is imported, while process pools pay for pickling and memory duplication; for which CPU-to-wait ratios, working sets and core counts does a thread pool on the free-threaded build deliver more throughput per core?
-
Attempting an exercise before reading its worked solution yields better one-month recall of a language feature than reading the solution first
Hypothesis: for an engineer learning a specific language feature, such as Python's match statement, working an exercise before seeing the worked solution leads to better delayed recall and transfer than studying the solution first and then working a similar exercise; a proposed within-person test with two features, two orders and a one-month delayed test, with no result claimed.
-
Отмена в asyncio: освобождайте ресурсы, не поглощая CancelledError
Сохраняйте видимость отмены для владельца задачи, освобождая ресурсы на прерванном пути.
Машиночитаемо: JSON