Отличный блог для начинающих #python-разработчиков, которые хотят копнуть глубже.
Простыми словами про хранение и обработку строк в питоне, сборку мусора, внутренности классов, GIL и многое другое.
https://rushter.com/blog/
Простыми словами про хранение и обработку строк в питоне, сборку мусора, внутренности классов, GIL и многое другое.
https://rushter.com/blog/
Kenneth Reitz, автор известной python-библиотеки requests, разрабатывает еще и веб-фреймворк.
https://python-responder.org
Как всегда очень простой и удобный API, умеет async/await, встроенная поддержка GraphQL и еще куча приятных вещей.
Вряд ли кто-то бросится переписывать на него все свои django сервисы, но поиграться или сделать какую-нибудь мелочь - идеально.
#python
https://python-responder.org
Как всегда очень простой и удобный API, умеет async/await, встроенная поддержка GraphQL и еще куча приятных вещей.
Вряд ли кто-то бросится переписывать на него все свои django сервисы, но поиграться или сделать какую-нибудь мелочь - идеально.
#python
🐍 Тред про иммутабельность в Python от Юрия Селиванова, core-разработчика языка.
https://twitter.com/1st1/status/1090325242432630784
#python
https://twitter.com/1st1/status/1090325242432630784
#python
Twitter
Yury Selivanov
Let's talk about immutability. Python, unlike languages like Clojure, Erlang, and Rust is built entirely around mutable state. I'm going to try to convince you that immutability is awesome and can be effectively used in Python today. Thread 👇
🐍 В 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