и посмотреть медиа
Zen of Python - дзен
и посмотреть медиа
Полный гид по философии и практике Python в одном канале.
Полный гид по философии и практике Python в одном канале.
Zen of Python - канал, посвящённый философии и практикам Python. Уроки, скрипты, лучшие практики и материалы для освоения языка в Telegram.
uv 0.12.5 поменял правило выбора интерпретатора: при одинаковом приоритете теперь предпочитается более новая версия и стандартный вариант Python. Если в конфигурации несколько интерпретаторов с равным приоритетом, окружение может собраться уже не тем Python, что вчера. 🔘 подтянуты CPython 3.10.21, 3.11.16 и 3.12.14; 🔘 в preview у --index и --default-index появился выбор настроенного индекса по имени; 🔘 экспорт SBOM в CycloneDX по умолчанию содержит URL и хеши артефактов; 🔘 cache-physical-space откатывается к логическому размеру файла там, где физический размер файловая система не отдаёт; 🔘 в скриптах по PEP 723 относительные пути к индексам разрешаются относительно каталога скрипта, а не текущего каталога. Выбор индекса по имени авторы помечают как preview. Численных бенчмарков в заметках к релизу нет. @zen_of_python
Открыть канал и посмотреть медиаPyPI перестал принимать новые файлы в релизы старше четырнадцати дней Сет Ларсон описал это изменение 22 июля. Правило простое: если версия пакета опубликована больше двух недель назад, добавить в неё новый файл больше нельзя. Цель — закрыть сценарий, при котором давно стабильную версию тихо дополняют после угона токена или доступа к сборочному процессу. Подтверждённых злоупотреблений на момент публикации не было. 🔘 обсуждение началось ещё вокруг PEP 740 в январе 2024 года и вернулось в марте 2026-го после компрометации двух проектов; 🔘 исправление влили 8 июля 2026 года; 🔘 главное возражение бытовое: проекты иногда докладывают колёса для новой версии Python в уже выпущенный релиз; 🔘 масштаб возражения измерили: среди 15 тысяч самых популярных пакетов так поступили только 56 проектов, добавив совместимое с CPython 3.14 колесо позже чем через две недели; 🔘 на профильной встрече в рамках PyCon US 2026 сочли приемлемым требование выпускать под новый Python новую версию пакета; 🔘 автор просит пока не закладываться на это правило как на гарантию: семантика закрытого релиза и соответствующий интерфейс ещё не определены. Окончательная модель должна приехать вместе с новым протоколом загрузки и предварительными релизами, после стандартизации PEP 694. Так что практический вывод для авторов пакетов такой: план поддержки нового CPython теперь придётся строить через выпуск новой версии, а не через дозагрузку колеса в старую. @zen_of_python
Открыть канал и посмотреть медиаNumba 0.67.0 научилась работать с NumPy 2.5 и собирает пакеты для Python 3.14 и Windows ARM64. 🔘 у np.sum и np.cumsum появился динамический axis, ось теперь можно вычислять во время выполнения; 🔘 добавлена JIT-поддержка np.insert, пока без аргумента axis; 🔘 np.random.binomial в RandomState переключается с BINV на BTPE, когда n * min(p, 1 - p) > 30, поток случайных чисел при этом сохраняется; 🔘 анализ живости переменных перевели на топологический порядок, а проверка принадлежности стеку в _find_back_edges стала за O(1); 🔘 сборки через pycc теперь могут быть побайтно воспроизводимыми на Linux и macOS. Из ломающего: np.row_stack и двумерное векторное произведение убраны вслед за NumPy 2.5, cross2d остаётся только для старых версий. Пакеты под Windows ARM64 на старте ограничены Python 3.14, часть тестов там пропущена из-за проблемы в LLVM 22. Отдельно починили тихую ошибку компиляции при повторном присваивании нелокальной переменной во вложенной функции: раньше генерировался неверный код, теперь вылетает UnsupportedError. Численного бенчмарка ускорения BTPE авторы не приводят. @zen_of_python
Открыть канал и посмотреть медиаДвадцать пять минут, которые снимают половину вопросов новичка: доклад Неда Бэтчелдера «Facts and Myths about Python names and values» с PyCon US 2015. Весь доклад отвечает на один вопрос: что происходит, когда вы пишете x = 23. Ответ — не «в переменную кладётся значение», а «имя привязывается к объекту». Из этого простого сдвига вырастает объяснение почти всех классических непоняток: 🔘 почему Python нельзя описать ни как передачу по значению, ни как передачу по ссылке; 🔘 почему два имени могут указывать на один объект и менять его вместе; 🔘 почему присваивание никогда не копирует объект; 🔘 почему += для списка и для числа ведут себя по-разному; 🔘 почему изменяемый аргумент по умолчанию живёт между вызовами; 🔘 почему аргументы функции, атрибуты объекта и переменная цикла — это всё одна и та же операция связывания имени. Бэтчелдер разбирает это на диаграммах с коробочками и стрелками, без единой строчки про внутренности интерпретатора. Именно поэтому доклад одиннадцатилетней давности не устарел ни на строчку: семантика имён и объектов с тех пор не менялась. @zen_of_python
Открыть канал и посмотреть медиаCython научился подсказывать компилятору C, какая ветка вероятнее 14 августа вышла бета 3.3.0b1. Релиз для тех, кто собирает расширения: в нём несколько вещей, которые раньше приходилось обходить руками. 🔘 появились cython.likely() и cython.unlikely() — подсказки оптимизатору компилятора C о том, какая ветка условия ожидается чаще; 🔘 реализована конструкция except * для групп исключений по PEP 654 на Python 3.11 и новее; 🔘 аннотации типов у глобальных переменных теперь участвуют в выводе типов, а не игнорируются; 🔘 у сеттеров свойств, объявленных на C, появилась возможность явно пробрасывать исключение вместо безусловной проверки PyErr_Occurred() после каждого вызова; 🔘 поддержан синтаксис однородных кортежей вида tuple[atype, ...]; 🔘 набор возможностей общего модуля теперь настраивается при сборке: команда cython generate-shared принимает --only и --exclude, так что в модуль попадает только нужное. Последний пункт стоит читать вместе с предупреждением авторов: возможность экспериментальная, и если при сборке выключить то, что реально используется, импорт упадёт уже во время работы. Отдельно поменялась схема имён при экспорте и импорте слитых функций на C, но старые имена оставлены для совместимости. Есть и просто ускорения: форматирование чисел в f-строках, extend у bytearray байтами, проверки одиночного символа, размер асинхронных генераторов и перевод модулей с большим числом строк. Численных замеров в списке изменений нет, только слова «быстрее» и «меньше», так что судить о выигрыше на своём проекте придётся самому. @zen_of_python
Открыть канал и посмотреть медиаDjango переходит на один релиз в год. Steering Council принял DEP 20: с января 2028-го выходит один feature-релиз в год, версии называются по году — Django 2028, Django 2029. 🔘 каждый релиз получает три года поддержки: год обычных исправлений и два года security и data-loss fixes; отдельная метка LTS уходит, потому что каждая версия теперь LTS; 🔘 версия поддерживает три последних Python на момент выхода и подхватывает новый Python в первый год; поддержка Django заканчивается вместе с самым старым из них; 🔘 в любой момент поддерживаются три версии, и обновляться можно по одной в год без прыжка через два года изменений; 🔘 политика депрекаций не меняется, в календарных днях сроки только удлиняются. Переход: Django 6.1 вышел в августе, 6.2 LTS выйдет в апреле 2027-го, Django 2028 — в январе 2028-го. Обязательства по 5.2 LTS и 6.2 LTS остаются как объявлены. @zen_of_python
Открыть канал и посмотреть медиаПочему str.lower() иногда ломает проверку имён доменов Регистр символа в Python зависит от версии Unicode интерпретатора. Сейчас unicodedata.unidata_version — 17.0.0, а протокол подготовки строк stringprep, который лежит в основе международных доменных имён, зафиксирован на Unicode 3.2. Поэтому str.lower() и str.encode('idna') в разных версиях Python могут считать разные строки одинаковыми. В обычном коде это проходит незамеченным, а в проверке доменов или авторизации получается обход валидации. В контексте безопасности не зовите str.lower() напрямую. Берите пакет idna: он реализует стандарт IDNA 2008 и не использует встроенные таблицы Unicode. Seth Larson разбирает уязвимость и показывает, как это выглядит на практике.
Открыть канал и посмотреть медиаРазрешение зависимостей предложили считать задачей для решателя, а не перебором. SMTpip переводит ограничения пакетов и Requires-Python в формулу и отдаёт её weighted Max-SMT, который за один заход выбирает и версии библиотек, и версию интерпретатора. pip вместо этого перебирает кандидатов с откатами. Что получилось на замерах авторов: 🔘 в среднем по всем наборам ускорение в 6,9 раза против pip, в 9,6 против классического решателя Conda, в 3,2 против smartPip и в 4 против PyEGo; 🔘 на наборе HG2.9K те же 1668 случаев: 433,68 секунды против 2165,20 у pip, ускорение в 4,9 раза; 🔘 доля проектов, которые после установки реально запустились: 87,1% против 75,4% у pip, а на 3081 ноутбуке 39,92% против 20%. Оговорки авторы приводят сами. Это препринт первой версии; время меряли только для разрешения зависимостей, без скачивания и установки пакетов; из конкурентов брали классический solver Conda, libmamba оставили за рамками. Успешный запуск здесь означает, что программа стартовала, а не что она работает правильно. @zen_of_python
Открыть канал и посмотреть медиаУ Uvicorn появился разбор HTTP на Zig Версия 0.52.0 вышла 29 июля и принесла экспериментальную реализацию HTTP/1.1. Работает она на библиотеке zttp: разбор там устроен без собственного ввода-вывода, ядро написано на Zig, а к Python приделаны привязки. Включается новый разборщик параметром --http zttp, схема запуска при этом не меняется. 🔘 сам разборщик перед публикацией несколько недель гоняли под фаззингом и провели несколько раундов проверки безопасности; 🔘 авторы прямо называют его экспериментальным и не советуют пускать через него боевой трафик; 🔘 сравнительных замеров задержки и пропускной способности в заметках нет вообще, так что выигрыш придётся мерить самому; 🔘 отдельно починена обработка заголовков WebSocket с символами вне ASCII в связке с библиотекой websockets версии 17.0; 🔘 в той же версии websockets кодирование таких заголовков переведено на ISO-8859-1, и это как раз причина расхождения; 🔘 обратную связь авторы просят присылать в трекер, то есть релиз рассчитан на тех, кто готов проверять на своей нагрузке. Замеров ускорения авторы не приводят. Сам приём такой: разбор протокола вынесен в отдельную библиотеку без ввода-вывода, написанную на другом языке, а Python остаётся клеем и сокетным слоем. Проверить новый путь можно на тестовом стенде, ничего не меняя в боевом запуске: старая реализация остаётся на месте и остаётся выбором по умолчанию. @zen_of_python
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!
Официальный канал контрреволюционного журнала Петра Хайка. Анализ политики, общества и альтернативные взгляды.
Официальный дилер автомобилей: новые и подержанные в Узбекистане.
Пошаговые схемы заработка от 100000₽ в месяц с использованием смартфона.