Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Koristeiden Ketjuttaminen ja Pinoaminen | Python-iterointien ja Dekoraattoreiden Hallinta
Funktionaalisen Ohjelmoinnin Käsitteet Pythonissa

bookKoristeiden Ketjuttaminen ja Pinoaminen

Pyyhkäise näyttääksesi valikon

Kun työskentelet koristeiden (decorators) kanssa Pythonissa, usein tarvitaan useamman kuin yhden koristeen lisäämistä samaan funktioon. Tätä kutsutaan koristeiden ketjuttamiseksi tai pinoamiseksi. Koristeet pinotaan asettamalla useita koriste-rivejä peräkkäin suoraan funktiomäärittelyn yläpuolelle. Koristeiden järjestyksellä on merkitystä, koska se vaikuttaa siihen, miten funktio kääritään ja miten kukin koriste vaikuttaa muihin. Lähimpänä funktiota oleva koriste otetaan käyttöön ensin, ja jokainen seuraava koriste käärii edellisen tuloksen. Tämä tarkoittaa, että pinon ylin koriste on uloin kääre, kun taas lähimpänä funktiota oleva on sisin.

Alla olevassa esimerkissä määritellään kaksi koristetta, decorator_one ja decorator_two, jotka pinotaan greet-nimisen funktion yläpuolelle. Pinontajärjestys määrittää, miten koristeet otetaan käyttöön.

123456789101112131415161718192021222324252627
# Prints messages before and after the function call def decorator_one(func): def wrapper(*args, **kwargs): print("Decorator One: Before") result = func(*args, **kwargs) print("Decorator One: After") return result return wrapper # Also prints messages before and after the function call def decorator_two(func): def wrapper(*args, **kwargs): print("Decorator Two: Before") result = func(*args, **kwargs) print("Decorator Two: After") return result return wrapper # Stacking decorators # decorator_two is applied first (innermost), # then decorator_one wraps the result (outermost) @decorator_one @decorator_two def greet(name): print(f"Hello, {name}!") greet("Alice")
copy
Note
Huomio

Huomaa, että decorator_two lisätään ensin greet-funktioon, ja sitten decorator_one kietoo tuloksen. Tämä tarkoittaa, että lähimpänä funktiota oleva dekorointifunktio on sisin, ja ylimpänä oleva on uloin. Pinon järjestyksellä on merkitystä, sillä se vaikuttaa koristellun funktion toimintaan.

question mark

Missä järjestyksessä pinotut dekorointifunktiot lisätään Pythonissa?

Valitse kaikki oikeat vastaukset

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 4. Luku 5
some-alt