Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Introduction to Dekoratorer | Mestring af Python-Iteratorer og Dekoratører
Funktionelle Programmeringskoncepter i Python

bookIntroduction to Dekoratorer

Stryg for at vise menuen

Note
Definition

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.

12345678910111213
def 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")
copy

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.

  • *args samler alle ekstra positionelle argumenter, der sendes til en funktion, i et tuple;
  • **kwargs samler 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.

123456789101112
def 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")
copy

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?

question mark

Hvad er formålet med symbolet @ i Python?

Vælg det korrekte svar

question mark

Hvordan ændrer en dekoratør en funktions opførsel?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 1

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 4. Kapitel 1
some-alt