Lies den Code sorgfältig
from typing import Callable, ParamSpec, TypeVar
from functools import wraps
import inspect
P = ParamSpec("P")
R = TypeVar("R")
def trace(fn: Callable[P, R]) -> Callable[P, R]:
@wraps(fn)
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
print(f"calling {fn.__name__}")
result = fn(*args, **kwargs)
print(f"returned {result!r}")
return result
return wrapper
@trace
def add(a: int, b: int) -> int:
return a + b
@trace
def greet(name: str, *, prefix: str = "Hi") -> str:
return f"{prefix}, {name}"
result = add(2, 3)
print(f"=> {result}")
result = greet("Ada", prefix="Hello")
print(f"=> {result}")
sig = inspect.signature(add)
print(f"add sig: {sig}")
Was wird das Programm ausgeben? Schreib hier: