Introductie tot Decorators
Veeg om het menu te tonen
Een decorator in Python is een hogere-orde functie die een andere functie als argument neemt en een nieuwe functie retourneert die het gedrag van de oorspronkelijke functie uitbreidt of aanpast.
Decorators vormen een kernfunctie in Python waarmee het mogelijk is om het gedrag van functies of methoden te wijzigen of uit te breiden zonder hun code direct aan te passen. In essentie zijn decorators hogere-orde functies — ze nemen een andere functie als argument, breiden het gedrag uit of passen het aan, en geven een nieuwe functie terug. In Python wordt een decorator toegepast met het @-symbool gevolgd door de naam van de decorator, direct boven de functiedefinitie geplaatst.
Veelvoorkomende toepassingen van decorators zijn:
- Logging;
- Meten van de uitvoeringstijd van functies;
- Handhaven van toegangscontrole of permissies;
- Memoization (resultaten cachen);
- Validatie van invoer.
Decorators maken het mogelijk om dergelijke logica gescheiden te houden van de kernlogica, wat leidt tot schonere en beter onderhoudbare code. Door decorators te beheersen, beschik je over een krachtig hulpmiddel voor het schrijven van herbruikbare en expressieve Python-code.
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")
Inzicht in args en kwargs bij functiedefinities
Bij het schrijven van decorateurs en wrappers is het vaak nodig om functies te verwerken die een willekeurig aantal of type argumenten accepteren. Python biedt *args en **kwargs om dit mogelijk te maken.
*argsverzamelt alle extra positionele argumenten die aan een functie worden doorgegeven in een tuple;**kwargsverzamelt alle extra keyword-argumenten in een dictionary.
Deze flexibiliteit is essentieel voor decorateurs. Een decorateur moet in staat zijn om alle argumenten te accepteren en door te geven aan de oorspronkelijke functie, ongeacht het aantal of het type. Zonder *args en **kwargs zou je decorateur alleen werken met functies met een vaste signatuur, wat de herbruikbaarheid beperkt.
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")
Deze aanpak zorgt ervoor dat je decorateur elke functie kan omwikkelen, waardoor je code zowel robuust als herbruikbaar wordt.
1. Wat is het doel van het @-symbool in Python?
2. Hoe wijzigt een decorator het gedrag van een functie?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.