Питонические атаки
1.19K subscribers
183 photos
4 videos
1 file
459 links
Всяческие заметки про программирование на Python и другие весёлые истории.
Download Telegram
Чистый код на Python.

Эта статья содержит в себе краткий пересказ принципов, которые позволят писать идиоматичный, читаемый и поддерживаемый код. Примерно как конспект всех книг дядюшки Боба, но сразу же применённый к Python.

https://testdriven.io/blog/clean-code-python/
Как работают импорты в Python?

Ух, давненько я не читал такой жести, это прям сплошное мясо. Думаю, эта статья заслуживает однажды быть напечатанной в составе какой-нибудь книги. Очень много подробностей того, как устроена система импортов в Python. Я понимал, что эта система сложнее, чем я себе представляю, но не представлял насколько. Возможно, эти знания помогут мне меньше страдать с хаотичным перекладыванием файлов по папкам так, чтобы оно всё импортировалось в будущем.

Однозначно рекомендую эту серию статей "Python behind the scenes" к внимательному изучению, оно того стоит.

https://tenthousandmeters.com/blog/python-behind-the-scenes-11-how-the-python-import-system-works/
Brett Cannon запилил запускальщик питона py, который всегда запускает последнюю, самую свежую среди установленных версию. Это решает проблему, когда алиасы python/python3 перезатираются при установке очередной версии питона, так что они указывают не на самую новую версию питона, а на недавно установленную. В мире Windows подобная штука существует уже лет 10 и устанавливается по умолчанию, а вот теперь такое же есть и для Unix-систем.

Я никогда не страдал от проблемы перезаписывания алиасов python/python3, потому что пользуюсь менеджером версий asdf и сам контролирую, на какую версию ссылаются эти алиасы. Да, и pyenv тоже умеет точно так же.

Для меня, пожалуй, самым полезным применением этого py будет то, что он умеет находить виртуальные окружения, и использовать их без активации, так что вместо:

source .venv/bin/activate
python -m pip install httpx

можно писать вот так:

py -m pip install httpx

Написано на Rust.

https://snarky.ca/introducing-the-python-launcher-for-unix/
В Python 3.10 добавлены две новые встроенные функции aiter() и anext(), которые наконец добавляют возможность полноценно контролировать асинхронные итераторы и генераторы без вызовов dunder-методов. Синхронный и асинхронный миры становятся чуть более симметричными.

https://twitter.com/1st1/status/1374499776570347521
Начал смотреть доклады с Python Community Meetup от Райффайзенбанка. Годный контент и картиночки забавные.

https://youtu.be/qfMWyStoyS4?t=290

#meme
Первый доклад там по сути является пересказом событий и выступлений с Language Summit 2021. Там вообще было показано и сказано много интересного. Ускорение питона нынче самая популярная тема. Горячий выдался саммит, и сообществу наверняка понадобится какое-то время, чтобы всё это качественно впитать и осознать.

Вспомнил всё ещё разок и заодно законспектировал. Вот вам пересказ пересказа.

🐍 Making CPython faster
* Гвидо собрал команду внутри Майкрософт, и они будут работать над ускорением CPython;
* конечная цель — x5 ускорение в течение 4 лет;
* в 3.10 появятся первые оптимизации из этой серии, а 3.11 уже якобы должен работать примерно в два раза быстрее;
* всё это будет достигнуто без жертв со стороны обратной совместимости и мирного населения.

🐍CPython Improvements at Instagram
* внутри Instagram развился собственный форк CPython под названием Cinder, где они экспериментируют с различными подходами по улучшению производительности;
* в общей сложности, получилось ускорить CPython на 20-30%;
* среди применённых оптимизаций — различные срезания углов в асинхронном коде, оптимизация словарей;
* сделали JIT;
* исходники форка доступны на гитхабе, но поддерживаться оно не будет; вместо этого, они будут пытаться пропихнуть удачные оптимизации в апстрим CPython;
* они там в инстаграме совсем ударились в форки питона, поэтому кроме Cinder у них есть ещё один форк под названием Pyro, где упор сделан на более оптимальную работу сборщика мусора.

🐍HPy — Present and Future
* в разработке находится HPy — новый API/ABI для работы с интерпретатором из нативного кода, например, из библиотек на C;
* обещают, что это сделает PyPy и Python внутри GraalVM быстрее;
* в перспективе это ускорит и CPython, но не сейчас.

🐍 Progress on Running Multiple Python Interpreters in Parallel in the Same Process
* субинтерпретаторы в перспективе решат проблему GIL, т.е. позволят эффективно утилизировать несколько процессорных ядер без создания новых процессов в ОС;
* в синтетических тестах субинтерпретаторы работают чуть медленнее, чем мультипроцессинг, но это пока что лишь прототип, так что ок;
* синхронизацию между субинтерпретаторами планируется сделать через что-то, очень напоминающее каналы в Go.

#конспект
Sebastián Ramírez (@tiangolo) выпустил новый хит — SQLModel

Эта библиотека решает проблему дублирования кода моделей. Представьте, что вы используете FastAPI. Вам нужно определить модель данных один раз в стиле pydantic, чтобы провалидировать пользовательский ввод. Вы также используете SQLAlchemy ORM, поэтому вы определяете практически точно такую же модель в стиле SQLAlchemy, чтобы описать таблицу в базе.

Больше так делать не придётся, потому что классы SQLModel — это и модели pydantic, и таблицы алхимии одновременно! 🎉

Это всё бесшовно интегрируется как с экосистемой вокруг pydantic, так и со всем, что связано с алхимией. Как всегда, везде активно используются тайп-аннотации, так что редакторы и IDE поют от радости песни. Документация, как всегда, заслуживает отдельного упоминания — Себастьян в этом плане хорошо завысил планку моих ожиданий, и на худшую документацию я теперь просто не согласен!
Вот примерно так @tiangolo делает все свои проекты 😅

На самом деле, я считаю, что это талант — удачно объединять другие классные проекты, чтобы они становились ещё более полезными.

#meme
Forwarded from Pytup
🐍 Привет, питоняги!

Pytup уже завтра!
Начало в 18-00 по МСК, онлайн.
Регистрируйтесь, ссылочка на трансляцию придет вам на почту

🤗 Вова покажет нам как дружить типы и ide
🧬 Надя покажет как она умеет "готовить" мутации
🗞 Напоследок узнаем свежие новости из мира питона от Андрея

ЗЫ запись будет, да 🎥
А слышали когда-нибудь про RustPython?

Это интерпретатор Python, написанный на Rust 🦀 с нуля. Он компилируется в том числе и в WebAssembly, можно поиграться с ним прямо в браузере вот здесь.

Проект пока что находится на ранних стадиях разработки, но недавно у них случился большой успех — теперь работает pip и можно устанавливать пакеты!

https://rustpython.github.io/blog/2021/01/26/pip-support.html
2.7 все ещё популярнее, чем 3.9.

https://www.reddit.com/r/Python/comments/pb5j08/even_after_almost_2_years_migration_to_python_3/

P.S. Подозреваю, что где-то открылся портал в мультивселенную, и в наш PyPI проникло 429 наркоманов из мира, где есть Python 2.8.
Forwarded from Python Daily
lona-web-org/lona - очень любопытный фреймворк, который позволяет писать веб-приложения полностью на пайтоне. Ни строчки на js впредь! 😁

from lona.html import HTML, Button, Div, H1
from lona import LonaApp, LonaView

app = LonaApp(__file__)

@app.route('/')
class MyView(LonaView):
def handle_request(self, request):
message = Div('Button not clicked')
button = Button('Click me!')

html = HTML(
H1('Click the button!'),
message,
button,
)

self.show(html)

# this call blocks until the button was clicked
input_event = self.await_click(button)

if input_event.node == button:
message.set_text('Button clicked')

return html


app.run(port=8080)


#github #github_explore #nothabr #pydaily
Что бы вы поменяли в Python?