Ещё один прикол в 3.12 — встроенная функция
Раньше было как, складываешь 10 чиселок, где в результате ожидаешь получить 1, но получаешь что-то немного другое:
Но была специальная функция
sum()
теперь использует специальный алгоритм для сложения чисел с плавающей точкой с минимальной потерей точности (прочитать про алгоритм можно на вики).Раньше было как, складываешь 10 чиселок, где в результате ожидаешь получить 1, но получаешь что-то немного другое:
>>> sum([0.1] * 10)И ладно бы оно просто всегда ошибалось одинаково, дак ведь погрешность ещё и зависит от порядка, в котором складывать числа:
0.9999999999999999
>>> sum([0.1] * 5 + [0.05] * 10)А вы разве не знали, что сложение float'ов не коммутативно?
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
Но была специальная функция
math.fsum()
, которая всё делает правильно:>>> math.fsum([0.1] * 10)Дак вот в 3.12 встроенная функция
1.0
>>> math.fsum([0.1] * 5 + [0.05] * 10)
1.0
>>> math.fsum([0.05] * 10 + [0.1] * 5)
1.0
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()
?Wikipedia
Kahan summation algorithm
computation algorithm to sum a sequence of floating-point numbers
Питонические атаки
Ещё один прикол в 3.12 — встроенная функция sum() теперь использует специальный алгоритм для сложения чисел с плавающей точкой с минимальной потерей точности (прочитать про алгоритм можно на вики). Раньше было как, складываешь 10 чиселок, где в результате…
Выяснил отсюда, что
math.fsum()
всё-таки нужна, потому что она лучше сохраняет точность, чем встроенная sum()
, хоть и работает значительно медленнее. Видимо, там какие-то более сложные алгоритмы используются.GitHub
Improve accuracy of builtin sum() for float inputs · Issue #100425 · python/cpython
Currently sum() makes no efforts to improve accuracy over a simple running total. We do have math.fsum() that makes extreme efforts to be almost perfect; however, that function isn't well known...
Forwarded from Заметки Андрея
Летом успел съездить на 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
Анонс языка был очень мощным: вышло несколько статей, буквально пророчащих смерть обычного питона и становление Mojo в качестве его замены. Мне, разумеется, захотелось разобраться, насколько это серьёзные заявления, а насколько — хайп и кликбейт.
Разобрался! А теперь и вы можете: https://youtu.be/kzNwVdA3t_s.
P. S. А буквально позавчера Mojo стало можно загрузить и попробовать локально, ура: https://www.modular.com/blog/mojo-its-finally-here
Гвидо наградят премией NEC C&C Prize за разработку языка Python, который сильно повлиял на развитие технологий и общества.
Раньше не слышал про такую премию, но судя по тому, что японцы награждали ей в разные годы, среди прочих, таких гигантов как:
* Кен Томпсон и Деннис Ритчи
* Тим Бернерс-Ли
* Эдсгер Дейкстра
* Гордон Мур
* Линус Торвальдс
Это должно быть почетно! Поздравляем Гвидо! 🥳
Награда включает в себя сертификат, почётный значок и денежный приз в 10 миллионов йен.
Ссылка на анонс
Почитать про премию на вики
Раньше не слышал про такую премию, но судя по тому, что японцы награждали ей в разные годы, среди прочих, таких гигантов как:
* Кен Томпсон и Деннис Ритчи
* Тим Бернерс-Ли
* Эдсгер Дейкстра
* Гордон Мур
* Линус Торвальдс
Это должно быть почетно! Поздравляем Гвидо! 🥳
Награда включает в себя сертификат, почётный значок и денежный приз в 10 миллионов йен.
Ссылка на анонс
Почитать про премию на вики
Успели обновиться до 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
Релиз обещает быть интересным.
Пока что в 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
Релиз обещает быть интересным.
Discussions on Python.org
Python 3.13.0 alpha 1
It’s not a very exciting release (yet), but it’s time for the first alpha of Python 3.13 anyway! This is an early developer preview of Python 3.13 Major new features of the 3.13 series, compared to 3.12 Python 3.13 is still in development. This release…
Иногда аж вскрикиваю с заголовков рандомных статей в интернете. Если я когда-нибудь окончательно упорюсь в журнализм и начну писать такое, то... Даже не знаю, поставьте класс, подпишитесь на меня на бусти, онлифансе и медиуме. Ведь мне наверняка нужны будут деньги на таблетки. Главное не спорьте, со всем просто молча соглашайтесь, а то я могу воспринять это как сигнал, что нужно писать ещё. У автора заголовка явно неправильно подобрана доза.
Forwarded from Николай Хитров
Pycon 2023 - Архитектура кнута и пряника (запись)
Не так давно опубликовали записи докладов, так что думаю, пришла пора опубликовать. Изначально доклад планировал сделать про DDD и структуру проекта, но в итоге получился доклад про линтеры. Почему так вышло, смотрите в докладе. В презентации на все есть ссылки, можно скачать и прокликать.
Надеюсь, каждый для себя найдет что-нибудь новое и полезное. Как всегда, помидоры и набрасывания на вентилятор - приветствуются
Ссылка на youtube
Презентация в посте вот тут
Не так давно опубликовали записи докладов, так что думаю, пришла пора опубликовать. Изначально доклад планировал сделать про DDD и структуру проекта, но в итоге получился доклад про линтеры. Почему так вышло, смотрите в докладе. В презентации на все есть ссылки, можно скачать и прокликать.
Надеюсь, каждый для себя найдет что-нибудь новое и полезное. Как всегда, помидоры и набрасывания на вентилятор - приветствуются
Ссылка на youtube
Презентация в посте вот тут
YouTube
Николай Хитров. Архитектура кнута и пряника
Ждем вас на наших конференциях:
2 февраля 2024 - EkbPy
26-27 июля 2024 - PyCon
Николай Хитров
Backend Developer, Литрес
Архитектура кнута и пряника
Когда разработчик приходит на новый проект, первым делом ему приходится разбираться с местными устоями…
2 февраля 2024 - EkbPy
26-27 июля 2024 - PyCon
Николай Хитров
Backend Developer, Литрес
Архитектура кнута и пряника
Когда разработчик приходит на новый проект, первым делом ему приходится разбираться с местными устоями…
В PyCharm добавили поддержку PEP 701 с f-строками из 3.12. Теперь можно писать бесконечно вложенные кавычки, и это не будет ломать подсветку синтаксиса в редакторе.
https://blog.jetbrains.com/pycharm/2023/10/2023-2-3/
https://blog.jetbrains.com/pycharm/2023/10/2023-2-3/
The JetBrains Blog
PyCharm 2023.2.3 Is Out! | The PyCharm Blog
You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are an Ubuntu user. You can also download it from our website. Download PyCharm 2023.2.3
Ruff становится всё более зрелым проектом. Недавно выпустили версию 0.1.0: https://astral.sh/blog/ruff-v0.1.0
Всё ещё не 1.0, но 0.1.0 — это уже серьёзная заявка на стабильность! Что изменилось:
* В Ruff теперь есть preview mode, куда будут попадать все новые, экспериментальные фичи до момента их стабилизации; можно передать флаг
* Ruff теперь по умолчанию фиксит только те правила, которые можно пофиксить безопасно, не изменив смысл кода; unsafe fixes тоже можно запустить, но это нужно указывать явно, и желательно фиксить по одной ошибке за раз, а затем ревьювить получившийся код.
* Появилась политика версионирования; дальше версии будут не просто счётчиком релизов, а будут показывать наличие новых фич и ломающих изменений.
Всё ещё не 1.0, но 0.1.0 — это уже серьёзная заявка на стабильность! Что изменилось:
* В Ruff теперь есть preview mode, куда будут попадать все новые, экспериментальные фичи до момента их стабилизации; можно передать флаг
--preview
или указать в конфиге, чтобы получить доступ к этому великолепию.* Ruff теперь по умолчанию фиксит только те правила, которые можно пофиксить безопасно, не изменив смысл кода; unsafe fixes тоже можно запустить, но это нужно указывать явно, и желательно фиксить по одной ошибке за раз, а затем ревьювить получившийся код.
* Появилась политика версионирования; дальше версии будут не просто счётчиком релизов, а будут показывать наличие новых фич и ломающих изменений.
astral.sh
Ruff v0.1.0
Ruff adds a versioning policy, fix safety levels, and a preview mode for unstable features.
Питонические атаки
Я вам говорю, скоро он их обоих подожмёт
Ну и раз уж мы снова про Ruff, то надо зафиксировать график. Он уже подобрался совсем близко и щекочет там снизу пяточки pylint'у.
Думаю, что дальше популярность Ruff будет прирастать ещё быстрее, учитывая какую деятельность они развели, а теперь ещё и дают какие-никакие гарантии стабильности. Ведь дальше Ruff будет забирать аудиторию не только у линтеров, но и у форматтеров. Такая вот нехитрая ночная табуреточная аналитика (я на табуретке, а не на диване).
Кстати, интересно, что разрыв между pylint и flake8 будто бы сократился. Это почему, как думаете?
Думаю, что дальше популярность Ruff будет прирастать ещё быстрее, учитывая какую деятельность они развели, а теперь ещё и дают какие-никакие гарантии стабильности. Ведь дальше Ruff будет забирать аудиторию не только у линтеров, но и у форматтеров. Такая вот нехитрая ночная табуреточная аналитика (я на табуретке, а не на диване).
Кстати, интересно, что разрыв между pylint и flake8 будто бы сократился. Это почему, как думаете?
Питонические атаки
FastAPI перегнал Django по количеству скачиваний? 🤔 Твит
Что-то модно, что-то вышло из моды, а что-то вечно...
Спустя почти год, FastAPI окончательно перегнал Django по количеству скачиваний. Только Flask сдаваться, похоже, не собирается.
Всё равно какой-то диссонанс. Кажется, что Django — это прям база. Не верится, что он может вот так взять и сдуться. Господи, даже tornado скачивают в два раза больше, чем джанго. Но кто вообще знает, что такое торнадо? Поставьте хотдог, пересчитаем вас. Человек пять должно набраться. А про джанго точно слышали все. Джангисты, расскажите, может вы как-то на флешках или CD-RW болванках передаёте фреймворк по офису? Должно быть какое-то объяснение!
Спустя почти год, 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 вы всегда разберётесь и на ходу, без отдельного изучения.
* 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.
Люблю подкасты! Хотя тут вряд ли расслабишься, приходится активно думать, чтобы распарсить акцент Пабло.
Можно слушать на Spotify или Apple Podcasts.
Вы наверняка видели чувака с вот такой аватаркой, как на скриншоте. Не знаю как вы, а я постоянно натыкаюсь на его ответы на StackOverflow. Всегда по делу, максимально полезно, исчерпывающе. Мартин — один из восьми (на данный момент) юзеров на StackOverflow с репутацией больше миллиона. По тэгу Python он тупо первый, с отрывом от второго места больше, чем в два раза. Почти 20 тысяч ответов. Чувак просто легенда.
Собственно, недавно Мартина наградили почётным званием PSF Fellow за его огромный вклад в коммьюнити. Вообще, удивительно, что его не наградили раньше. Горжусь, потому что это я его номинировал :)
Новость
Собственно, недавно Мартина наградили почётным званием PSF Fellow за его огромный вклад в коммьюнити. Вообще, удивительно, что его не наградили раньше. Горжусь, потому что это я его номинировал :)
Новость
Astral официально анонсирует ruff format
График со скоростью работы я сначала неправильно считал, не заметил ruff. А он там вверху, просто полосочка очень мелкая.
Еще интересное заявление про статус форматтера:
While this is a Beta release, we consider the Ruff formatter production-ready. We’ve been using it in production for a while now, as have our alpha users from GitHub and Discord — including Dagster, whose monorepo contains over 50 Python packages and 500,000 lines of code.
Ну что, переезжаем с Black на Ruff?
P.S.: Кстати, я, кажется, начинаю понимать, почему Astral. Как-то связано с AST? Но ведь и линтер, и форматтер работают над CST! Кстрал должно быть!
График со скоростью работы я сначала неправильно считал, не заметил ruff. А он там вверху, просто полосочка очень мелкая.
Еще интересное заявление про статус форматтера:
While this is a Beta release, we consider the Ruff formatter production-ready. We’ve been using it in production for a while now, as have our alpha users from GitHub and Discord — including Dagster, whose monorepo contains over 50 Python packages and 500,000 lines of code.
Ну что, переезжаем с Black на Ruff?
P.S.: Кстати, я, кажется, начинаю понимать, почему Astral. Как-то связано с AST? Но ведь и линтер, и форматтер работают над CST! Кстрал должно быть!
Forwarded from Коробка с питоном
Пока я спал, руководящий совет языка принял PEP 703 (Making the Global Interpreter Lock Optional in CPython).
Кратко о том, о чём говорится в посте:
1. Руководящему совету ясно, что несмотря на все проблемы и недостатки потоков, nogil будет полезен для Python, так как позволит находить более масштабируемые решения.
2. В то же время, они не уверены, получится ли убрать GIL не сломав при этом обратную совместимость - всё же не хотелось бы терять десятилетия развития базы пакетов. Существующая пакетная экосистема - это одна из сильных сторон языка, как и простая интеграция библиотек на C c CPython.
3. Оценить влияние nogil без реализации сложно, поэтому nogil должен выпускаться в составе регулярных релизов и не обязательно он там должен быть по-умолчанию.
4. Это всё ещё не гарантированная история. Если что-то пойдет не так - от изменений откажутся. Развёртывание должно быть постепенным и наиболее плавным.
5. Выкатка будет происходить в 3 фазы, которые возможно изменятся:
- В первой фазе nogil сделают возможным таргетом при сборке, чтобы разработчики могли тестировать свои пакеты.
- Во второй фазе, когда изменения в API и ABI будут сформированы, а поддержка nogil от сообщества будет достаточной, nogil-сборку добавлят как "поддерживаемую, но не по умолчанию".
- В третьей фазе nogil-сборку сделают сборкой "по-умолчанию", а от gil-сборки будут отказываться.
6. При успешной реализации nogil, ожидается падение производительности на 10-15% в худшем случае.
#pep
Кратко о том, о чём говорится в посте:
1. Руководящему совету ясно, что несмотря на все проблемы и недостатки потоков, nogil будет полезен для Python, так как позволит находить более масштабируемые решения.
2. В то же время, они не уверены, получится ли убрать GIL не сломав при этом обратную совместимость - всё же не хотелось бы терять десятилетия развития базы пакетов. Существующая пакетная экосистема - это одна из сильных сторон языка, как и простая интеграция библиотек на C c CPython.
3. Оценить влияние nogil без реализации сложно, поэтому nogil должен выпускаться в составе регулярных релизов и не обязательно он там должен быть по-умолчанию.
4. Это всё ещё не гарантированная история. Если что-то пойдет не так - от изменений откажутся. Развёртывание должно быть постепенным и наиболее плавным.
5. Выкатка будет происходить в 3 фазы, которые возможно изменятся:
- В первой фазе nogil сделают возможным таргетом при сборке, чтобы разработчики могли тестировать свои пакеты.
- Во второй фазе, когда изменения в API и ABI будут сформированы, а поддержка nogil от сообщества будет достаточной, nogil-сборку добавлят как "поддерживаемую, но не по умолчанию".
- В третьей фазе nogil-сборку сделают сборкой "по-умолчанию", а от gil-сборки будут отказываться.
6. При успешной реализации nogil, ожидается падение производительности на 10-15% в худшем случае.
#pep
Discussions on Python.org
PEP 703 (Making the Global Interpreter Lock Optional in CPython) acceptance
(Posted for the whole Steering Council.) As we’ve announced before, the Steering Council has decided to accept PEP 703 (Making the Global Interpreter Lock Optional in CPython) . We want to make it clear why, and under what expectations we’re doing so. It…
Moscow Python проводит митап вот прямо сейчас: https://www.youtube.com/watch?v=B_HprPoVoig
Forwarded from Николай Хитров
Славянский язык программирования
Мем про древних Русов и ящеров продолжает набирать обороты. В этот раз мемологи сделали типовой урок с hello world на В++ - великом языке программирования древних Русов
P.S. Концовка улыбнула😁
https://youtu.be/KffVhdWAgXc?si=gIoaMfb4nhqs43al
Мем про древних Русов и ящеров продолжает набирать обороты. В этот раз мемологи сделали типовой урок с hello world на В++ - великом языке программирования древних Русов
P.S. Концовка улыбнула😁
https://youtu.be/KffVhdWAgXc?si=gIoaMfb4nhqs43al
YouTube
Великий язык программирования древних Русов
Спустя столько лет наконец-то мы можем писать код на величайшем языке программирования В††.
Наш гит хаб: https://github.com/KanatnikovMax/znanie-drevnix.git
Музыка из видео https://youtu.be/25cyl7S9R-A?si=5WSROCwnBZmLAnFf
Наш гит хаб: https://github.com/KanatnikovMax/znanie-drevnix.git
Музыка из видео https://youtu.be/25cyl7S9R-A?si=5WSROCwnBZmLAnFf
Вышел второй выпуск подкаста core.py от двух кор-разработчиков CPython. В этот раз про PEP 703 и выпиливание GIL — тема, которая волнует многих. Уже во всех радиоприемниках страны!
Кстати, я будто бы уже привык к акценту Пабло. Почти нормально слушается.
https://podcasters.spotify.com/pod/show/corepy/episodes/Episode-2---PEP-703-Removing-the-GIL-e2b8egi
P.S.: Да, для прослушивания этого подкаста, вероятно, потребуется включенный VPN. По крайней мере, в Apple Podcasts с российским айпишником он не включается.
Кстати, я будто бы уже привык к акценту Пабло. Почти нормально слушается.
https://podcasters.spotify.com/pod/show/corepy/episodes/Episode-2---PEP-703-Removing-the-GIL-e2b8egi
P.S.: Да, для прослушивания этого подкаста, вероятно, потребуется включенный VPN. По крайней мере, в Apple Podcasts с российским айпишником он не включается.