🐍 В Python 3.8 влили патч, который экономит 8 байт на каждом контейнере (списки, кортежи, дикты, множества).
Ранее на каждый контейнер garbage collector держал три указателя:
Ссылка на багтрекер: https://bugs.python.org/issue33597
P.S. В багтрекере вычитал, что похожую оптимизацию применили недавно в php.
#python
Ранее на каждый контейнер garbage collector держал три указателя:
gc_prev, gc_next, и gc_refcnt. Оказалось, что gc_prev и gc_refcnt никогда не используются одновременно и получилось для обеих задач использовать один указатель.Ссылка на багтрекер: https://bugs.python.org/issue33597
P.S. В багтрекере вычитал, что похожую оптимизацию применили недавно в php.
#python
Twitter
Raymond Hettinger
#python 3.8 news: Python containers are 8 bytes smaller on 64-bit builds. [] 64 ⟶ 56 () 48 ⟶ 40 {} 240 ⟶ 232 set() 224 ⟶ 216 Many thanks to Naoki Inada for looking carefully at the GC code.
📺 Поки чекаєте наступний епізод GoT можна подивитися відео з девелоперської конфи Google I/O 2019 або найбільшого івенту пітоністів PyCon 2019.
- Google I/O: Android, web, Chrome, ML/AI, продукти
- PyCon: Python, ML, opensource, asyncio, etc
#video #python #web
- Google I/O: Android, web, Chrome, ML/AI, продукти
- PyCon: Python, ML, opensource, asyncio, etc
#video #python #web
YouTube
Google I/O 2019 - All Sessions - YouTube
Python всегда описывали как язык "с батарейками". В стандартной поставке есть модули на все случаи жизни. Это выгодно отличает его от, ну например node.js, вспомните историю про leftpad ;)
На последнем саммите разработчков Python развернулась дискуссия о том, что от этого принципа стоит уходить. Стандартные модули развивают неохотно, приходится годамы поддерживать обратную совместимость, core-разработчики по уши заняты самим интерпретатором. Интернет сейчас гораздо доступнее, чем 20 лет назад, может проще всё-таки сделать
Один из разработчиков питоновского фреймворка Twisted пишет о том, как может выглядеть "Python kernel"
https://glyph.twistedmatrix.com/2019/06/kernel-python.html
А вот уже и предложение по удалению "севших батареек" в виде PEP 594.
#python
На последнем саммите разработчков Python развернулась дискуссия о том, что от этого принципа стоит уходить. Стандартные модули развивают неохотно, приходится годамы поддерживать обратную совместимость, core-разработчики по уши заняты самим интерпретатором. Интернет сейчас гораздо доступнее, чем 20 лет назад, может проще всё-таки сделать
pip install для того, что нужно конкретно вам?Один из разработчиков питоновского фреймворка Twisted пишет о том, как может выглядеть "Python kernel"
https://glyph.twistedmatrix.com/2019/06/kernel-python.html
А вот уже и предложение по удалению "севших батареек" в виде PEP 594.
#python
Twistedmatrix
Toward a “Kernel Python”
The life changing magic of a minimal standard library.
🐍 Python 3.8 вышел!
Из нового:
- оператор :=, который дает возможность присваивать значение переменной внутри другой операции, например внутри условия
- positional-only аргументы. Раньше любому аргументу функции при вызове можно было дописать его название (напр.
- f-strings стали более удобными для дебага
- запуск REPL через python -m asyncio делает то, что в браузерах сейчас называют top-level await.
- еще куча всего
https://docs.python.org/3/whatsnew/3.8.html
#python
Из нового:
- оператор :=, который дает возможность присваивать значение переменной внутри другой операции, например внутри условия
if, while. Процесс обсуждения этой фичи вынудил Гвидо отказаться от статуса BDFL и породил новый процесс разработки Python. Вот уж действительно рожденная в муках фича- positional-only аргументы. Раньше любому аргументу функции при вызове можно было дописать его название (напр.
foo(5) и foo(bar=5) ). Теперь, если автор функции по какой-то причине считает, что эти параметры могут быть только позиционными, можно заставить- f-strings стали более удобными для дебага
- запуск REPL через python -m asyncio делает то, что в браузерах сейчас называют top-level await.
- еще куча всего
https://docs.python.org/3/whatsnew/3.8.html
#python
🎸 Паша Филатов, один из наших разработчиков Shafa, написал короткий обзор как будет выглядеть асинхронность в Django 3.0
https://medium.com/@chimamireme/asynchronous-django-35fb2772a0c4?source=friends_link&sk=43bb097f4a63e3270bf0782e195c19d7
#python
https://medium.com/@chimamireme/asynchronous-django-35fb2772a0c4?source=friends_link&sk=43bb097f4a63e3270bf0782e195c19d7
#python
Medium
Asynchronous Django
Yeah, I know, it’s a bit early. But you can already use django with async/await. Pretty cool, right? Want to try it yourself? Download…
🧙♀️Закончились праздники, возвращаемся к нормальному ритму!
Наш лучший специалист Александр Коваль уже достаточно давно делает python DSL для Elasticsearch
https://github.com/anti-social/elasticmagic
Документация https://elasticmagic.readthedocs.io/en/latest/
По-сути это query builder для эластика, с АПИшечкой вдохновленной SQLAlchemy. В ридми написано very alpha, но мы этим пользуемся уже несколько лет и дико довольны.
А недавно наш лучший специалист Макс Киндрицкий сделал порт этой библиотеки на TypeScript. Теперь и на ноде можно работать с эластиком без слез на глазах
https://github.com/kindritskyiMax/elasticmagic-js
#python #javascript #elasticsearch #project
Наш лучший специалист Александр Коваль уже достаточно давно делает python DSL для Elasticsearch
elasticmagic.https://github.com/anti-social/elasticmagic
Документация https://elasticmagic.readthedocs.io/en/latest/
По-сути это query builder для эластика, с АПИшечкой вдохновленной SQLAlchemy. В ридми написано very alpha, но мы этим пользуемся уже несколько лет и дико довольны.
А недавно наш лучший специалист Макс Киндрицкий сделал порт этой библиотеки на TypeScript. Теперь и на ноде можно работать с эластиком без слез на глазах
https://github.com/kindritskyiMax/elasticmagic-js
#python #javascript #elasticsearch #project
GitHub
GitHub - anti-social/elasticmagic: Python DSL for Elasticsearch
Python DSL for Elasticsearch. Contribute to anti-social/elasticmagic development by creating an account on GitHub.
🐍 Конец официальной поддержки Python 2 породил очередную волну статей о переезде на третью версию.
Core-разработчик Mercurial, Gregory Szorc описал их историю миграции в двух частях. В первой хронология портирования, во второй - личное мнение автора о процессе миграции и самом Python 3.
Из интересного, первое упоминание Py3 в репозитории самого меркуриала появилось аж в 2008, затем небольшие изменения в C-extensions в 2010 году. Более-менее систематичная работа над портированием началась аж в 2015 году. А закончилась только в конце 2019! Разработчикам пришлось реализовать свой аналог six, т.е. слой абстракции, который скрывает разницу между 2й и 3й версиями. А также хак с импортом модулей, который на лету подменял все неаннотированные явно строки на byte, вместо ставшим стандартным в 3м питоне unicode.
Из личного мнения уже не удивляет фраза про то, что если бы начинали проект сейчас, писали бы его на Rust. Интересная мысль о том, что чрезмерное, по мнению автора, форсирование юникода в языке и стандартной библиотеке сделало Python языком, который не так удобно использовать в системном\низкоуровневом софте. Да и трудно спорить с тем фактом, что для многих первая юзабельная версия 3й ветки были Python 3.4/3.5, а это 5-7 лет с дня первого релиза 3.0.
https://gregoryszorc.com/blog/2020/01/13/mercurial%27s-journey-to-and-reflections-on-python-3/
#python
Core-разработчик Mercurial, Gregory Szorc описал их историю миграции в двух частях. В первой хронология портирования, во второй - личное мнение автора о процессе миграции и самом Python 3.
Из интересного, первое упоминание Py3 в репозитории самого меркуриала появилось аж в 2008, затем небольшие изменения в C-extensions в 2010 году. Более-менее систематичная работа над портированием началась аж в 2015 году. А закончилась только в конце 2019! Разработчикам пришлось реализовать свой аналог six, т.е. слой абстракции, который скрывает разницу между 2й и 3й версиями. А также хак с импортом модулей, который на лету подменял все неаннотированные явно строки на byte, вместо ставшим стандартным в 3м питоне unicode.
Из личного мнения уже не удивляет фраза про то, что если бы начинали проект сейчас, писали бы его на Rust. Интересная мысль о том, что чрезмерное, по мнению автора, форсирование юникода в языке и стандартной библиотеке сделало Python языком, который не так удобно использовать в системном\низкоуровневом софте. Да и трудно спорить с тем фактом, что для многих первая юзабельная версия 3й ветки были Python 3.4/3.5, а это 5-7 лет с дня первого релиза 3.0.
https://gregoryszorc.com/blog/2020/01/13/mercurial%27s-journey-to-and-reflections-on-python-3/
#python
🐍 Вышла очередная альфа следующего релиза Python 3.9. Главное, что нас ожидает:
1. Новые операторы у диктов для слияния (
2. Расширение аннотаций. В данный момент большая часть аннотаций - это аннотации типами. Хотя в целом эта фича имеет гораздо больше потенциал. От валидции, до навешивания новой логики переменной. Новый класс
3. Переход на релизный цикл раз в год. До этого конкретной даты не было и релиз происходил тогда, когда разработчики считали что продукт готов
Код фриза для версии еще не произошло, возможно появиться еще что-то интересное.
#python
1. Новые операторы у диктов для слияния (
dict1| dict2) и дополнения (dict1 |= dict2). Все существующие варианты решения такой пустяковой проблемы либо достаточно громоздкие, либо неочевидны синтаксически 2. Расширение аннотаций. В данный момент большая часть аннотаций - это аннотации типами. Хотя в целом эта фича имеет гораздо больше потенциал. От валидции, до навешивания новой логики переменной. Новый класс
Annotated позволит это исправить 3. Переход на релизный цикл раз в год. До этого конкретной даты не было и релиз происходил тогда, когда разработчики считали что продукт готов
Код фриза для версии еще не произошло, возможно появиться еще что-то интересное.
#python
Python.org
Python Release Python 3.9.0a5
The official home of the Python Programming Language
🐍 Про хеширование и равенство в Питоне и других языках
В двух словах:
#python
В двух словах:
Don’t override hash and eq to force objects to hashable. Use immutable objects instead.
https://eng.lyft.com/hashing-and-equality-in-python-2ea8c738fb9d#python
Medium
Hashing and Equality in Python
Don’t override __hash__ and __eq__ to force objects to hashable. Use immutable objects instead.
💥В Python 3.10 может появиться паттерн-матчинг
https://www.python.org/dev/peps/pep-0622/
Мотивация: чаще всего builtin
#python
https://www.python.org/dev/peps/pep-0622/
Мотивация: чаще всего builtin
isinstance в Python используют в контексте if isinstance(a, A): ... elif isinstance(a, B): .... Решили эту конструкцию упростить и сделать более читабельной. Предлагается синтаксис для матчинга с литералами, константами и деструктуризацией объектов:match node:Если этот PEP примут, это будет первая фича, которая будет использовать возможности нового парсера python. Среди авторов Гвидо и Иван Левкивский.
case Node(children=[LParen(), RParen()]):
return True
case Node(children=[Leaf(value="("), Node(), Leaf(value=")")]):
return True
case _:
return False
#python
Python Enhancement Proposals (PEPs)
PEP 622 – Structural Pattern Matching | peps.python.org
This PEP proposes to add a pattern matching statement to Python, inspired by similar syntax found in Scala, Erlang, and other languages.
🦄 Хотите небольшой привкус golang или даже deno в Python? Держите githubimport.
Добавляет хук к импорту, который позволяет прямо из интерпретатора импортировать код с гитхаба
Упоминают еще модуль httpimport, который умеет это же, но без каноничного синтаксиса импортов, зато с поддержкой Gitlab/BitBucket
#python
Добавляет хук к импорту, который позволяет прямо из интерпретатора импортировать код с гитхаба
>>> import githubimporthttps://gist.github.com/MineRobber9000/998fe8c5a183fa2649f937c9d2e0b8b0
>>> from MineRobber9000.test_modules import blah
>>> blah.foo()
"bar"
Упоминают еще модуль httpimport, который умеет это же, но без каноничного синтаксиса импортов, зато с поддержкой Gitlab/BitBucket
#python
Gist
Import Python modules from GitHub
Import Python modules from GitHub. GitHub Gist: instantly share code, notes, and snippets.
🐍 Пару дней назад вышел релиз Python 3.9. Уже даже инфографика с нововведениями есть
https://docs.python.org/release/3.9.0/whatsnew/3.9.html
UPD: Все, кто нашли ошибку на картинке получают ачивку "Орлиный глаз 🦅". Вариант без ошибки можно найти в наших комментариях. Спасибо дорогим читателям!
#python
https://docs.python.org/release/3.9.0/whatsnew/3.9.html
UPD: Все, кто нашли ошибку на картинке получают ачивку "Орлиный глаз 🦅". Вариант без ошибки можно найти в наших комментариях. Спасибо дорогим читателям!
#python
Forwarded from Python Daily
Python functions naming: an algorithm
Здравый гайд по именованию функций. Особенно полезно почитать тем у кого методы, которые что-то возвращают называются только
#python #codestyle #medium #pydaily #nothabr
Здравый гайд по именованию функций. Особенно полезно почитать тем у кого методы, которые что-то возвращают называются только
get_* и никак иначе.#python #codestyle #medium #pydaily #nothabr
Medium
Python functions naming: an algorithm
The Motivation Part
🌌Продолжаем про наш opensource
Darq - асинхронный Celery-like менеджер задач для Python.
Предыстория
В одном из наших проектов мы начинали плавный переход с синхронного на асинхронный Python. Мы активно использовали Celery, и он был главным блокером при переходе - так, как даже постановку в очередь существующих Celery-задач из асинхронного кода реализовать нетривиально и очень костыльно. Не говоря уже о том, что весь новый код мы хотели писать асинхронным, а оставляя Celery пришлось бы дублировать много логики.
Основными нашими требованиями было:
- поддержка асинхронного кода
- возможность постановки задач из синхронного кода
- гибкость настройки: интеграция кастомного логгинга, трассировки, покрытие метриками
Из существующих решений ничего подходящего не нашлось. Так и появился Darq.
Что такое Darq?
Это асинхронный Celery-like менеджер задач, в качестве транспорта использующий Redis. Является форком arq (https://github.com/samuelcolvin/arq).
Основные фичи:
-
- Отложенный запуск задачи
- Cron (scheduler)
- Graceful shutdown: при тушении процесса текущие задачи корректно завершаются
- Широкие возможности для кастомизации: сallback-и
#opensource #python
Darq - асинхронный Celery-like менеджер задач для Python.
Предыстория
В одном из наших проектов мы начинали плавный переход с синхронного на асинхронный Python. Мы активно использовали Celery, и он был главным блокером при переходе - так, как даже постановку в очередь существующих Celery-задач из асинхронного кода реализовать нетривиально и очень костыльно. Не говоря уже о том, что весь новый код мы хотели писать асинхронным, а оставляя Celery пришлось бы дублировать много логики.
Основными нашими требованиями было:
- поддержка асинхронного кода
- возможность постановки задач из синхронного кода
- гибкость настройки: интеграция кастомного логгинга, трассировки, покрытие метриками
Из существующих решений ничего подходящего не нашлось. Так и появился Darq.
Что такое Darq?
Это асинхронный Celery-like менеджер задач, в качестве транспорта использующий Redis. Является форком arq (https://github.com/samuelcolvin/arq).
Основные фичи:
-
@task декоратор, .delay() для постановки задачи в очередь (как в Celery)- Отложенный запуск задачи
- Cron (scheduler)
- Graceful shutdown: при тушении процесса текущие задачи корректно завершаются
- Широкие возможности для кастомизации: сallback-и
on_startup, on_shutdown, on_job_prerun, on_job_postrun, on_job_prepublish, on_scheduler_startup, on_scheduler_shutdown позволяют добавлять трассировочную информацию, покрывать метриками задачи и тд#opensource #python
GitHub
GitHub - seedofjoy/darq: Async task manager with Celery-like features. Fork of arq.
Async task manager with Celery-like features. Fork of arq. - seedofjoy/darq
📽 Я дуже люблю MyPy у Python. На великих проектах ця штука дозволяє хоча б мінімально розуміти які дані ходять в тебе між функціями.
Розумію і всі мінуси, і складність в деяких випадках, і неможливість покрити все зовсім. Але як на мене, це значно краще ніж нічого.
На останньому PyCon US один кор-девів Łukasz Langa зробив кейноут, в якому розказав як спростити собі життя, коли пишете аннотації типів
https://www.youtube.com/watch?v=wbohVjhqg7c
#video #python
Розумію і всі мінуси, і складність в деяких випадках, і неможливість покрити все зовсім. Але як на мене, це значно краще ніж нічого.
На останньому PyCon US один кор-девів Łukasz Langa зробив кейноут, в якому розказав як спростити собі життя, коли пишете аннотації типів
https://www.youtube.com/watch?v=wbohVjhqg7c
#video #python
YouTube
Keynote - Łukasz Langa
CPython Developer in Residence, Python 3.8 and 3.9 release manager, creator of Black, pianist, dad.
ambv on Github.
Opinions his own.
ambv on Github.
Opinions his own.
👍5❤1