Introduksjon til dekoratorer
Sveip for å vise menyen
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.
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 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.
*argssamler alle ekstra posisjonsargumenter som sendes til en funksjon i en tuple;**kwargssamler 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.
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 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?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår