Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Introductie tot Decorators | Mastering Python Decorators
Functionele Programmeerconcepten in Python

Introductie tot Decorators

Veeg om het menu te tonen

Note
Definitie

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.

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")

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.

  • *args verzamelt alle extra positionele argumenten die aan een functie worden doorgegeven in een tuple;
  • **kwargs verzamelt 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.

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")

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?

question mark

Wat is het doel van het @-symbool in Python?

Selecteer het correcte antwoord

question mark

Hoe wijzigt een decorator het gedrag van een functie?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 4. Hoofdstuk 1
some-alt