Μετάβαση στο κύριο περιεχόμενο
🔒 Λειτουργία προεπισκόπησης. Τα πρώτα δεκαπέντε μαθήματα Foundations είναι δωρεάν· αυτό είναι Pro. Ξεκινήστε ένα 7ήμερο trial για να ξεκλειδώσετε τον επεξεργαστή, τις υποδείξεις AI και το υπόλοιπο του προγράμματος. Απαιτείται κάρτα, ακυρώνετε οποιαδήποτε στιγμή από το Dashboard.Ξεκινήστε 7ήμερο trial →
← ΜαθήματαSenior Deep-DivesModule 11 · Decorator patterns at scaletyping.ParamSpec — decorators that preserve the wrapped signaturepredict156 / 161
+150 XP
Εργασία
📝 **Εργασία:** Προβλέψτε την έξοδο 7 γραμμών. Ένας διακοσμητής «ίχνους» τυλίγει δύο λειτουργίες: «add(a, b)» και «greet(name, *, prefix='Hi')». Κατά το χρόνο εκτέλεσης, το περιτύλιγμα εκτυπώνει την ένδειξη "calling ..." κατά την είσοδο και "returned ..." κατά την έξοδο. Η τελική γραμμή χρησιμοποιεί «inspect.signature(add)» για να επαληθεύσει ότι το «@wraps» διατήρησε την ORIGINAL υπογραφή — αποδεικνύοντας ότι η δήλωση «ParamSpec» στην πλευρά πληκτρολόγησης αντικατοπτρίζει αυτό που ήδη βλέπει η ενδοσκόπηση χρόνου εκτέλεσης. 📋 Υλοποιήστε την παραπάνω λειτουργία. Οι δοκιμές εκτελούνται αυτόματα. 💡 **Υπόδειξη:** Ξαναδιάβασε τη θεωρία αν κολλήσεις.
Πρόβλεψε έξοδο

Διάβασε τον κώδικα προσεκτικά

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

Τι θα εμφανίσει το πρόγραμμα; Γράψε εδώ:

💬 Συζήτηση

Γίνε ο πρώτος — κάνε μια ερώτηση ή μοιράσου μια συμβουλή.
Σύνδεση για να συμμετάσχεις στη συζήτηση. Η ανάγνωση είναι δωρεάν.
Φόρτωση συζήτησης…