Питонические атаки
1.2K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Офигеть, уже вышел 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 будто бы сократился. Это почему, как думаете?
Питонические атаки
FastAPI перегнал Django по количеству скачиваний? 🤔 Твит
Что-то модно, что-то вышло из моды, а что-то вечно...

Спустя почти год, FastAPI окончательно перегнал Django по количеству скачиваний. Только Flask сдаваться, похоже, не собирается.

Всё равно какой-то диссонанс. Кажется, что Django — это прям база. Не верится, что он может вот так взять и сдуться. Господи, даже tornado скачивают в два раза больше, чем джанго. Но кто вообще знает, что такое торнадо? Поставьте хотдог, пересчитаем вас. Человек пять должно набраться. А про джанго точно слышали все. Джангисты, расскажите, может вы как-то на флешках или CD-RW болванках передаёте фреймворк по офису? Должно быть какое-то объяснение!
Я провёл исследование российского рынка найма (методом поиска по хедхантеру), и вот сколько вакансий нашлось с упоминанием разных веб-фреймворков:

* Django — 352 вакансии;
* FastAPI — 291 вакансия;
* Flask — 214 вакансий;
* aiohttp — 96 вакансий;
* Tornado — 12 вакансий.

Это вообще никак не матчится с количеством скачиваний этих пакетов из PyPI, но оно, наверное, и не должно. Здесь Django явно (пока?) чувствует себя хорошо, но FastAPI всё равно подступает. Похоже, пользователи Tornado просто предпочитают не афишировать себя.

Даже не знаю, какие тут можно сделать выводы. Для меня утверждение, что новичкам-питонистам обязательно нужно учить джанго, чтобы найти работу, точно не выглядит таким уж однозначно правильным. Вообще, лучше инвестировать время не в изучение конкретных фреймворков и библиотек, а в изучение основ языка или вообще основ computer science. Ну, или можно вообще взять data science. Всего лишь нужно изучить математику (это всегда полезно), и вы будете очень востребованы. Для сравнения, pandas упоминается в 413 вакансиях. А с FastAPI и Flask вы всегда разберётесь и на ходу, без отдельного изучения.
Pablo Galindo и Łukasz Langa запустили подкаст. Легендарные чуваки. Первый эпизод про core dev sprint, который недавно имел место быть в Чехии.

Люблю подкасты! Хотя тут вряд ли расслабишься, приходится активно думать, чтобы распарсить акцент Пабло.

Можно слушать на Spotify или Apple Podcasts.
Вы наверняка видели чувака с вот такой аватаркой, как на скриншоте. Не знаю как вы, а я постоянно натыкаюсь на его ответы на StackOverflow. Всегда по делу, максимально полезно, исчерпывающе. Мартин — один из восьми (на данный момент) юзеров на StackOverflow с репутацией больше миллиона. По тэгу Python он тупо первый, с отрывом от второго места больше, чем в два раза. Почти 20 тысяч ответов. Чувак просто легенда.

Собственно, недавно Мартина наградили почётным званием PSF Fellow за его огромный вклад в коммьюнити. Вообще, удивительно, что его не наградили раньше. Горжусь, потому что это я его номинировал :)

Новость