GeistHaus
log in · sign up

14 Advanced Python Features

blog.edward-li.com

A collection of advanced Python features that I've found interesting, underrated, or unique - as someone who's seen a lot of Python code.

3 pages link to this URL
Advanced Python features

https://blog.edward-li.com/tech/advanced-python-features/ Protocols Python slots to make accessing fields of a class faster for-else statements to avoid if x is not None(): ... etc., TODO a lot of cool stuff https://news.ycombinator.com/item?id=43770494 * did you know __init__.py is optional nowadays? * you can do relative imports with things like "from ..other import foo" * since 3.13 there is a @deprecated decorator that does what you think it does * the new generics syntax also works on methods/functions: "def method[T](...)" very cool * you can type kwargs with typeddicts and unpack: "def fn(*kwargs: Unpack[MyKwargs])" * dataclasses (and pydantic) support immutable objects with: "class MyModel(BaseModel, frozen=True)" or "@dataclass(frozen=True)" * class attributes on dataclasses, etc. can be defined with "MY_STATIC: ClassVar[int] = 42" this also supports abstract base classes (ABC) * TypeVar supports binding to enforce subtypes: "TypeVar['T', bound=X]", and also a default since 3.13: "TypeVar['T', bound=X, default=int]" * @overload is especially useful for get() methods to express that the return can't be none if the default isn't None * instead of Union[a, b] or Optional[a] you can write "a | b" or "a | None" nowadays * with match you can use assert_never() to ensure exhaustive matching in a "case _:" block * typing has reveal_type() which lets mypy print the type it thinks something is * typing's "Self" allows you to more properly annotate class method return types * the time package has functions for monotonic clocks and others not just time()

0 inbound links article en dtb ZcZc/ItPython