April 2026
Date: Friday, April 3rd @ 11am
Princeton Python Monthly: Apr 2026
Happy Spring!
Our next meeting is a week from Monday.
As usual we will start with a beginner-friendly code opener, this time about the lazy import feature new in python 3.15,
then everyone's introductions/updates;
and finally our links, Python news and the usual mix of the latest tools, testing, and tutorials at https://www.princetonpy.org/next-meeting/
And as always, your questions/ideas/doings are welcome--so join us!
Note our unchanging meeting url--use the Jitsi meeting link on our home page.
But first, check out AI Study Group this Sunday! Seems like we need to use AI just to keep up with the advances in AI, but Rick's explorations are always informative.
[plus 4th Wednesdays in-person at fubar labs]
events:
sun05apr 2p AI Study Group [first sundays]
mon13apr 7p princetonpy meeting [second mondays]
links:
The gathering links: https://www.princetonpy.org/next-meeting/
AI Study Group: https://fubarlabs.org/calendar/
links so far...
The Optimization Ladder
Python loses every public benchmark by 21-875x. Cemrehan took the exact problems people use to dunk on Python and climbed every rung of the optimization ladder: from CPython version upgrades to Rust. Real numbers, real code, real effort costs.
https://pycoders.com/link/16121/web
Why Python Is Slow
The usual suspects are the GIL, interpretation, and dynamic typing. All three matter, but none of them is the real story. The real story is that Python is designed to be maximally dynamic --
you can monkey-patch methods at runtime, replace builtins, change a class's inheritance chain while instances exist -- and that design makes it fundamentally hard to optimize.
free-threaded mode (--disable-gil) ... actually makes single-threaded code slower because removing the GIL adds overhead to every reference count operation.
Invent Your Own Comprehensions in Python
Python doesn’t have tuple, frozenset, or Counter comprehensions, but you can invent your own by passing a generator expression to any iterable-accepting callable.
TREY HUNNER
https://pycoders.com/link/16108/web
The Weird and Wonderful World of Descriptors in Python
[Python uses the descriptor protocol to automatically equate numbers.append(30) to the function call list.append(numbers, 30)
Thoughts on OpenAI Acquiring Astral
Astral is the organization behind popular Python tools such as uv, ruff, and ty. Recently it was announced that OpenAI would be acquiring Astral. This opinion piece discusses the possible impact.
SIMON WILLISON
even in the worst possible future this is a very forkable and maintainable thing.
Sunsetting Jazzband
https://jazzband.co/news/2026/03/14/sunsetting-jazzband
GitHub’s slopocalypse – the flood of AI-generated spam PRs and issues – has made Jazzband’s model of open membership and shared push access untenable.
Jazzband was designed for a world where the worst case was someone accidentally merging the wrong PR. In a world where only 1 in 10 AI-generated PRs meets project standards,
where curl had to shut down its bug bounty because confirmation rates dropped below 5%, and where GitHub’s own response was a kill switch to disable pull requests entirely – an organization that gives push access to everyone who joins simply can’t operate safely anymore.
I want to specifically thank Django Commons and Tim Schilling for picking up where Jazzband fell short. They have 5 admins, 15 active projects .... They solved the governance problem from day one. If you’re a Jazzband project lead looking for a new home for your Django project, start there.