Python programming with type hints, async/await, decorators, and package management. Use for .py files and data science.
Modern Python development with type hints, async/await, and best practices.
.py filesfrom typing import Optional, List
def process_items(
items: list[str],
transform: Optional[callable] = None,
) -> list[str]:
if transform:
return [transform(item) for item in items]
return items
from typing import TypeVar, Generic
from collections.abc import Callable, Iterator
def process_items(
items: list[str],
transform: Callable[[str], str] | None = None,
) -> list[str]:
if transform:
return [transform(item) for item in items]
return items
# Use TypeVar for generics
T = TypeVar('T')
def first(items: list[T]) -> T | None:
return items[0] if items else None
from dataclasses import dataclass, field
from pydantic import BaseModel, Field
# Dataclass for simple data containers
@dataclass
class User:
name: str
email: str
tags: list[str] = field(default_factory=list)
# Pydantic for validation
class UserCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=100)
email: str = Field(..., pattern=r'^[\w\.-]+@[\w\.-]+\.\w+$')
import asyncio
async def fetch_all(urls: list[str]) -> list[Response]:
async with aiohttp.ClientSession() as session:
tasks = [fetch_one(session, url) for url in urls]
return await asyncio.gather(*tasks)
# Use TaskGroup for structured concurrency (3.11+)
async def process_batch(items: list[Item]) -> list[Result]:
results = []
async with asyncio.TaskGroup() as tg:
for item in items:
tg.create_task(process_item(item, results))
return results
from contextlib import contextmanager, asynccontextmanager
@contextmanager
def managed_resource() -> Iterator[Resource]:
resource = Resource()
try:
yield resource
finally:
resource.cleanup()
Do:
pyproject.toml for project configurationvenv, poetry)Don't:
def f(x=[])import * (pollutes namespace)except: (catch specific exceptions)assert for input validation| Error | Cause | Solution |
|---|---|---|
ModuleNotFoundError | Package not installed | Run pip install package |
IndentationError | Mixed tabs/spaces | Use consistent 4-space indentation |
TypeError: unhashable type | Using list as dict key | Use tuple instead |