Introduction to Dekoratorer
Stryg for at vise menuen
En dekorer i Python er en højere-ordens funktion, der tager en anden funktion som argument og returnerer en ny funktion, som udvider eller ændrer adfærden af den oprindelige funktion.
Dekoratorer er en kernefunktion i Python, der gør det muligt at ændre eller udvide adfærden af funktioner eller metoder uden at ændre deres kode direkte. Grundlæggende er dekoratorer højere-ordens funktioner — de tager en anden funktion som argument, udvider eller ændrer dens adfærd og returnerer en ny funktion. I Python anvendes dekoratorer med @-symbolet efterfulgt af dekoratorens navn, placeret direkte over funktionsdefinitionen.
Almindelige anvendelser af dekoratorer inkluderer:
- Logning;
- Måling af hvor lang tid funktioner tager at køre;
- Håndhævelse af adgangskontrol eller tilladelser;
- Memoisering (cache af resultater);
- Validering af input.
Dekoratorer gør det muligt at holde sådan logik adskilt fra din kerneforretningslogik, hvilket fører til renere og mere vedligeholdelig kode. Ved at mestre dekoratorer får du et kraftfuldt værktøj til at skrive genanvendelig og udtryksfuld Python-kode.
12345678910111213def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
Forståelse af *args og kwargs i funktionsdefinitioner
Når man skriver dekoratorer og wrappers, skal man ofte håndtere funktioner, der kan tage et vilkårligt antal eller typer af argumenter. Python stiller *args og **kwargs til rådighed for at muliggøre dette.
*argssamler alle ekstra positionelle argumenter, der sendes til en funktion, i et tuple;**kwargssamler alle ekstra nøgleordsargumenter i en ordbog.
Denne fleksibilitet er afgørende for dekoratorer. En dekorator skal kunne acceptere og videresende alle argumenter til den oprindelige funktion, uanset antal eller type. Uden *args og **kwargs ville din dekorator kun fungere med funktioner med en fast signatur, hvilket begrænser genanvendelighed.
123456789101112def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
Denne tilgang sikrer, at din dekorator kan omslutte enhver funktion og gør din kode både robust og genanvendelig.
1. Hvad er formålet med symbolet @ i Python?
2. Hvordan ændrer en dekoratør en funktions opførsel?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat