Прескочи на главни садржај
🔒 Режим прегледа. Првих петнаест Foundations лекција је бесплатно; ова је Pro. Покрените 7-дневни trial да откључате едитор, AI савете и остатак курса. Картица је обавезна, можете отказати у било ком тренутку у Dashboard.Покрени 7-дневни trial →
← KurseviSenior Deep-DivesModule 11 · Decorator patterns at scaletyping.ParamSpec — decorators that preserve the wrapped signaturepredict156 / 161
+150 XP
Zadatak
📝 **Задатак:** Предвидите излаз од 7 редова. Декоратор `траце` обавија две функције: `адд(а, б)` и `греет(наме, *, префик='Хи')`. У току извршавања омот штампа 'цаллинг ...' при уласку и 'ретурнед ...' на излазу. Последњи ред користи `инспецт.сигнатуре(адд)` да би проверио да ли је `@врапс` сачувао ОРИГИНАЛНИ потпис — доказујући да декларација `ПарамСпец` на страни куцања одражава оно што интроспекција током извршавања већ види. 📋 Имплементирајте горњу функцију. Тестови се покрећу аутоматски. 💡 **Савет:** Поново прочитајте теорију ако запнете.
Predvidi izlaz

Pažljivo pročitaj kod

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}")

Šta će program ispisati? Napiši ovde:

💬 Diskusija

Budi prvi — postavi pitanje ili podeli savet.
Prijavi se da bi se pridružio diskusiji. Čitanje je besplatno.
Učitavanje diskusije…