Питонические атаки
1.2K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Появился PEP 723, который предлагает "встраивать" pyproject.toml в однофайловые скрипты.
Предлагается добавить переменную __pyproject__, которая будет содержать в себе валидный TOML, описывающий метадату скрипта, в том числе как скрипт запускать и какие зависимости необходимы для запуска.

К примеру, вот так будет выглядеть скрипт, которому для работы нужна библиотека requests и питон 3.11 или выше:

__pyproject__ = """
[project]
requires-python = ">=3.11"
dependencies = [
"requests<3",
]
"""
import requests
resp = requests.get("https://peps.python.org/api/peps.json")
print(resp.json())

PEP прикольный, что-то такое есть в качестве экспериментального RFC в Rust. Из минусов хотел бы отметить то, что автоматическая установка зависимостей может привести к запуску нежелательного кода. Но решение банальное - перед тем как что-то запускать, проверяйте, что вы запускаете.

#pep
Apple рассказывает про часы — точно такие же, как старые, только новее и розовее. А тем временем без больших презентаций происходят куда более интересные вещи. Например, в Ruff появился встроенный форматтер.

Пока что это только экспериментальная альфа-версия, но уже обещают 99% совместимость с Black. Уже можно поставить последнюю версию Ruff и попробовать. Позже в этом году планируется уже пригодный к продакшн использованию релиз.
Офигеть, уже вышел Python 3.12.0rc2. Это последняя предрелизная версия. Дальше уже только настоящий релиз, который запланирован на 2 октября. Как правило, между вторым релиз-кандидатом и релизом почти ничего не меняется, так что, в принципе, уже можно с нежной осторожностью трогать свежую версию интерпретатора.

Вот здесь можно почитать What’s new.
О, пошло дело. В репозитории python/cpython на гитхабе появился тэг v3.12.0, что означает... Ну, думаю, вы и сами понимаете. Скоро будет официально релизнуто. 🍾

Правда, в этот раз как-то скромно. Без помпезных стримов со спикерами и шляпами. Или это я просто не нашел где стримят?
Pydantic нанимает фронтендера. Что-то происходит 🤔

Видать начали что-то делать из своего роадмапа.

Twi
PSF и JetBrains выложили результаты опроса среди питонистов за 2022 год: https://lp.jetbrains.com/python-developers-survey-2022/

По результатам вижу несколько интересных пунктов:

🔹 Значительно увеличилась доля тех, кто считает себя Data Scientist'ом — 34% против 29% в прошлом году; и этот опрос ещё проходил до или в самом начале нынешней GPT-лихорадки; интересно будет посмотреть на результаты следующего года.

🔹 Среди сценариев использования Machine Learning обогнал девопсов и сисадминов, а доля веб-девелоперов почему-то снижается. Баланс сил нарушен — раньше веб-разработка и data science/machine learning были примерно в одинаковых пропорциях.

🔹 Чёрт побери, почему доля Python 2 выросла? Всё же хорошо шло, вы зачем раскопали-то опять. Это как-то связано с предыдущими пунктами? 🤔

🔹 Доля Poetry среди пакетных менеджеров постепенно растёт. Люди постепенно пересаживаются с Requests на httpx. FastAPI надёжно закрепился в тройке популярных веб-вреймворков и продолжает откусывать доли у Flask и Django.
Судя по опросу выше, для многих релиз 3.12 не содержит каких-то больших сносящих крышу фич. Сложно с этим поспорить. Что ж, давайте тогда смотреть на мелкие фичи. По мелочам много всего приятно поменялось.

Например, в itertools добавили функцию batched, которая разбивает список или любой итерируемый объект на кортежи указанной длины. Последний кортеж может быть короче указанной длины, если не хватит элементов.

Пример:

>>> list(batched('ABCDEFG', 3))
[('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)]

Раньше для этого приходилось либо определять эту функцию самостоятельно, взяв её из документации Python, либо устанавливать библиотеки, типа more-itertools. Да, эта функция испокон веков лежит в виде сниппета кода в документации, но в стандартной библиотеке её нигде не было. Теперь есть 🤷‍♂️ Возможно, теперь я буду чуть реже ставить more-itertools.

Документация: https://docs.python.org/3/library/itertools.html#itertools.batched
Ещё один прикол в 3.12 — встроенная функция sum() теперь использует специальный алгоритм для сложения чисел с плавающей точкой с минимальной потерей точности (прочитать про алгоритм можно на вики).

Раньше было как, складываешь 10 чиселок, где в результате ожидаешь получить 1, но получаешь что-то немного другое:

>>> sum([0.1] * 10)
0.9999999999999999

И ладно бы оно просто всегда ошибалось одинаково, дак ведь погрешность ещё и зависит от порядка, в котором складывать числа:

>>> sum([0.1] * 5 + [0.05] * 10)
1.0000000000000004
>>> sum([0.05] * 10 + [0.1] * 5)
0.9999999999999999
>>> sum([0.1, 0.05, 0.05, 0.05, 0.05, 0.1, 0.1, 0.05, 0.05, 0.1, 0.05, 0.05, 0.05, 0.1, 0.05])
1.0000000000000002

А вы разве не знали, что сложение float'ов не коммутативно?

Но была специальная функция math.fsum(), которая всё делает правильно:

>>> math.fsum([0.1] * 10)
1.0
>>> math.fsum([0.1] * 5 + [0.05] * 10)
1.0
>>> math.fsum([0.05] * 10 + [0.1] * 5)
1.0

Дак вот в 3.12 встроенная функция sum() даёт такие же результаты, как math.fsum(). По крайней мере, я не смог найти примера, где они дали бы разный результат. Кроме того, по моим замерам, sum() работает ещё и раза в полтора быстрее math.fsum():

>>> timeit.timeit("sum([0.05] * 10 + [0.1] * 5)")
0.26875441599986516
>>> timeit.timeit("math.fsum([0.05] * 10 + [0.1] * 5)", setup="import math")
0.34194887499961624

Кто-нибудь понимает, зачем теперь нужна math.fsum()?
Летом успел съездить на PyCon Russia и выступить с докладом про новый язык программирования Mojo. История там такая: Крис Латнер, некогда очень активно поучаствовавший в создании LLVM, clang и Swift, вместе со своей командой решил сделать платформу для обучения нейросеточек и другого ML, а для этого делает свой язык программирования, максимально похожий на питон и тесно интегрированный с ним.

Анонс языка был очень мощным: вышло несколько статей, буквально пророчащих смерть обычного питона и становление Mojo в качестве его замены. Мне, разумеется, захотелось разобраться, насколько это серьёзные заявления, а насколько — хайп и кликбейт.

Разобрался! А теперь и вы можете: https://youtu.be/kzNwVdA3t_s.

P. S. А буквально позавчера Mojo стало можно загрузить и попробовать локально, ура: https://www.modular.com/blog/mojo-its-finally-here
Гвидо наградят премией NEC C&C Prize за разработку языка Python, который сильно повлиял на развитие технологий и общества.

Раньше не слышал про такую премию, но судя по тому, что японцы награждали ей в разные годы, среди прочих, таких гигантов как:

* Кен Томпсон и Деннис Ритчи
* Тим Бернерс-Ли
* Эдсгер Дейкстра
* Гордон Мур
* Линус Торвальдс

Это должно быть почетно! Поздравляем Гвидо! 🥳

Награда включает в себя сертификат, почётный значок и денежный приз в 10 миллионов йен.

Ссылка на анонс
Почитать про премию на вики
Кажется, PSF нанимает второго разработчика по программе Developer in Residence. Им станет давнишний кор-контрибьютор Петр Викторин из Чехии. Сейчас Петр работает лидом команды Python Maintenance в Red Hat.
Успели обновиться до 3.12? А там уже вовсю пилят 3.13 и вышел первый альфа-релиз: https://discuss.python.org/t/python-3-13-0-alpha-1/36109

Пока что в 3.13 есть только куча удалений давно задепрекейченных модулей и ещё много разных штук объявляются deprecated. Но это только самое начало цикла разработки. Сейчас на peps.python.org есть около 10 предложений, которые целятся попасть в версию 3.13. Среди которых самые интересные, пожалуй:

* PEP 649 – Deferred Evaluation Of Annotations Using Descriptors — уже принят
* PEP 554 – Multiple Interpreters in the Stdlib
* PEP 703 – Making the Global Interpreter Lock Optional in CPython
* PEP 730 – Adding iOS as a supported platform

Релиз обещает быть интересным.
Иногда аж вскрикиваю с заголовков рандомных статей в интернете. Если я когда-нибудь окончательно упорюсь в журнализм и начну писать такое, то... Даже не знаю, поставьте класс, подпишитесь на меня на бусти, онлифансе и медиуме. Ведь мне наверняка нужны будут деньги на таблетки. Главное не спорьте, со всем просто молча соглашайтесь, а то я могу воспринять это как сигнал, что нужно писать ещё. У автора заголовка явно неправильно подобрана доза.
Pycon 2023 - Архитектура кнута и пряника (запись)

Не так давно опубликовали записи докладов, так что думаю, пришла пора опубликовать. Изначально доклад планировал сделать про DDD и структуру проекта, но в итоге получился доклад про линтеры. Почему так вышло, смотрите в докладе. В презентации на все есть ссылки, можно скачать и прокликать.

Надеюсь, каждый для себя найдет что-нибудь новое и полезное. Как всегда, помидоры и набрасывания на вентилятор - приветствуются

Ссылка на youtube
Презентация в посте вот тут
В PyCharm добавили поддержку PEP 701 с f-строками из 3.12. Теперь можно писать бесконечно вложенные кавычки, и это не будет ломать подсветку синтаксиса в редакторе.

https://blog.jetbrains.com/pycharm/2023/10/2023-2-3/
Ruff становится всё более зрелым проектом. Недавно выпустили версию 0.1.0: https://astral.sh/blog/ruff-v0.1.0

Всё ещё не 1.0, но 0.1.0 — это уже серьёзная заявка на стабильность! Что изменилось:

* В Ruff теперь есть preview mode, куда будут попадать все новые, экспериментальные фичи до момента их стабилизации; можно передать флаг --preview или указать в конфиге, чтобы получить доступ к этому великолепию.

* Ruff теперь по умолчанию фиксит только те правила, которые можно пофиксить безопасно, не изменив смысл кода; unsafe fixes тоже можно запустить, но это нужно указывать явно, и желательно фиксить по одной ошибке за раз, а затем ревьювить получившийся код.

* Появилась политика версионирования; дальше версии будут не просто счётчиком релизов, а будут показывать наличие новых фич и ломающих изменений.
Питонические атаки
Я вам говорю, скоро он их обоих подожмёт
Ну и раз уж мы снова про Ruff, то надо зафиксировать график. Он уже подобрался совсем близко и щекочет там снизу пяточки pylint'у.

Думаю, что дальше популярность Ruff будет прирастать ещё быстрее, учитывая какую деятельность они развели, а теперь ещё и дают какие-никакие гарантии стабильности. Ведь дальше Ruff будет забирать аудиторию не только у линтеров, но и у форматтеров. Такая вот нехитрая ночная табуреточная аналитика (я на табуретке, а не на диване).

Кстати, интересно, что разрыв между pylint и flake8 будто бы сократился. Это почему, как думаете?