SuperAPI AI Directory

python-modern-python

Coding & development

View repository

Updated 10-16 06:45

About this skill

Modern Python Features

Modern Python 3.12+ language features, type hints, and patterns.

Type Hints

Basic Types

def greet(name: str) -> str:
    return f"Hello {name}"

age: int = 25
prices: list[float] = [9.99, 19.99]
mapping: dict[str, int] = {"a": 1}

Unions and aliases

# Modern syntax
def process(value: int | str) -> bool:
    ...

# Optional
def get_user(user_id: int) -> "User | None":
    ...

# Multiple types
type Result = int | str | bool

Generic Types

class Repository[T]:
    def get(self, id: int) -> T | None:
        raise NotImplementedError

    def save(self, entity: T) -> T:
        raise NotImplementedError

Protocol (Structural Typing)

from typing import Protocol

class Drawable(Protocol):
    """Structural type - any class with draw()"""
    def draw(self) -> None:
        ...

def render(obj: Drawable) -> None:
    """Works with any object that has draw()"""
    obj.draw()

Pattern Matching

Basic Matching

def handle_command(command: str) -> str:
    match command:
        case "start":
            return "started"
        case "stop":
            return "stopped"
        case "status":
            return "status"
        case _:
            raise ValueError("Unknown command")

Matching with Values

def handle_http_status(status: int) -> str:
    match status:
        case 200:
            return "OK"
        case 404:
            return "Not Found"
        case 500 | 502 | 503:
            return "Server Error"
        case _:
            return "Unknown"

Structural Pattern Matching

def process_point(point: object) -> str:
    match point:
        case (0, 0):
            return "Origin"
        case (x, 0):
            return f"On X-axis at {x}"
        case (0, y):
            return f"On Y-axis at {y}"
        case (x, y):
            return f"At ({x}, {y})"

Async/Await

Async Functions

import asyncio
from typing import Any

import httpx

async def fetch_data(url: str) -> dict[str, Any]:
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        response.raise_for_status()
        return response.json()

async def main() -> None:
    data = await fetch_data("https://api.example.com")
    print(data)

asyncio.run(main())

Concurrent Execution

import asyncio

async def process_all(urls: list[str]) -> list[dict[str, Any]]:
    results: list[dict[str, Any]] = []
    async with asyncio.TaskGroup() as group:
        tasks = [group.create_task(fetch_data(url)) for url in urls]
    for task in tasks:
        results.append(task.result())
    return results

Async Context Managers

class AsyncDatabase:
    async def __aenter__(self) -> "AsyncDatabase":
        await self.connect()
        return self

    async def __aexit__(self, *args: object) -> None:
        await self.disconnect()

async def read_database() -> None:
    async with AsyncDatabase() as db:
        await db.query()

Dataclasses

from dataclasses import dataclass

@dataclass(frozen=True)
class Point:
    x: float
    y: float

    def distance_from_origin(self) -> float:
        return (self.x ** 2 + self.y ** 2) ** 0.5

Walrus Operator

# Assign and use in one expression
if (n := len(items)) > 10:
    print(f"Too many items: {n}")

# In comprehensions
results = [y for x in items if (y := process(x)) is not None]

Modern String Formatting

name = "Alice"
age = 30

# f-strings
message = f"Hello {name}, you are {age} years old"

# f-strings with expressions
message = f"In 5 years you'll be {age + 5}"

# Debug f-strings (Python 3.8+)
print(f"{name=}")  # name='Alice'

References

  • Typing: protocols, decorators, and static/runtime boundaries.
  • Async: TaskGroup, cancellation, and async iteration.
  • Pattern matching: captures, guards, and exhaustiveness.