Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Introduksjon til dekoratorer | Mastering Python-Iteratorer og Dekoratører
Funksjonelle Programmeringskonsepter i Python

bookIntroduksjon til dekoratorer

Sveip for å vise menyen

Note
Definisjon

En dekoratør i Python er en høyereordens funksjon som tar en annen funksjon som argument og returnerer en ny funksjon som utvider eller endrer oppførselen til den opprinnelige funksjonen.

Dekoratører er en kjernefunksjon i Python som lar deg endre eller utvide oppførselen til funksjoner eller metoder uten å endre koden deres direkte. I bunn og grunn er dekoratører høyereordens funksjoner — de tar en annen funksjon som argument, utvider eller endrer dens oppførsel, og returnerer en ny funksjon. I Python brukes @-symbolet etterfulgt av dekoratørens navn, plassert rett over funksjonsdefinisjonen, for å bruke en dekoratør.

Vanlige bruksområder for dekoratører inkluderer:

  • Logging
  • Måling av hvor lang tid funksjoner bruker på å kjøre
  • Håndheving av tilgangskontroll eller tillatelser
  • Memoisering (bufring av resultater)
  • Validering av input

Dekoratører lar deg holde slik logikk adskilt fra forretningslogikken, noe som gir renere og mer vedlikeholdbar kode. Ved å mestre dekoratører får du et kraftig verktøy for å skrive gjenbrukbar og uttrykksfull 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 av args og kwargs i funksjonsdefinisjoner

Når du skriver dekoratører og omslag, må du ofte håndtere funksjoner som tar et vilkårlig antall eller type argumenter. Python tilbyr *args og **kwargs for å gjøre dette mulig.

  • *args samler alle ekstra posisjonsargumenter som sendes til en funksjon i en tuple;
  • **kwargs samler alle ekstra nøkkelordargumenter i en ordbok.

Denne fleksibiliteten er avgjørende for dekoratører. En dekoratør må kunne motta og videresende alle argumenter til den opprinnelige funksjonen, uansett hvor mange eller hvilken type de er. Uten *args og **kwargs ville dekoratøren din bare fungere med funksjoner som har en fast signatur, noe som begrenser gjenbrukbarheten.

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 tilnærmingen sikrer at dekoratøren din kan omslutte enhver funksjon, noe som gjør koden både robust og gjenbrukbar.

1. Hva er formålet med symbolet @ i Python?

2. Hvordan endrer en dekoratør en funksjons oppførsel?

question mark

Hva er formålet med symbolet @ i Python?

Velg det helt riktige svaret

question mark

Hvordan endrer en dekoratør en funksjons oppførsel?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 4. Kapittel 1
some-alt