Introduction to Decorators
Pyyhkäise näyttääksesi valikon
Dekoraattori Pythonissa on korkeamman asteen funktio, joka ottaa toisen funktion argumenttina ja palauttaa uuden funktion, joka laajentaa tai muuttaa alkuperäisen funktion toimintaa.
Dekoraattorit ovat olennainen ominaisuus Pythonissa, jonka avulla voit muokata tai laajentaa funktioiden tai metodien toimintaa muuttamatta niiden koodia suoraan. Pohjimmiltaan dekoraattorit ovat korkeamman asteen funktioita — ne ottavat toisen funktion argumenttina, laajentavat tai muuttavat sen toimintaa ja palauttavat uuden funktion. Pythonissa dekoraattorin käyttöön tarkoitetaan @-symbolia, joka sijoitetaan suoraan funktiomäärittelyn yläpuolelle.
Yleisiä käyttötarkoituksia dekoraattoreille ovat:
- Lokitus;
- Funktioiden suoritusaikojen mittaaminen;
- Käyttöoikeuksien tai pääsynvalvonnan toteutus;
- Muistaminen (tulosten välimuisti);
- Syötteen validointi.
Dekoraattoreiden avulla tällainen logiikka voidaan pitää erillään ydintoiminnallisuudesta, mikä johtaa selkeämpään ja helpommin ylläpidettävään koodiin. Hallitsemalla dekoraattorit saat käyttöösi tehokkaan työkalun uudelleenkäytettävän ja ilmaisuvoimaisen Python-koodin kirjoittamiseen.
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")
args ja kwargs-parametrien ymmärtäminen funktioiden määrittelyissä
Kun kirjoitetaan dekorattoreita ja kääreitä, on usein tarpeen käsitellä funktioita, jotka ottavat vastaan minkä tahansa määrän tai tyyppisiä argumentteja. Python tarjoaa tähän tarkoitukseen *args ja **kwargs.
*argskerää kaikki ylimääräiset paikka-argumentit tupleen;**kwargskerää kaikki ylimääräiset avainsana-argumentit sanakirjaan.
Tämä joustavuus on olennainen dekorattoreille. Dekoraattorin täytyy pystyä vastaanottamaan ja välittämään kaikki argumentit alkuperäiselle funktiolle riippumatta niiden määrästä tai tyypistä. Ilman *args ja **kwargs dekorattorisi toimisi vain funktioiden kanssa, joilla on kiinteä allekirjoitus, mikä rajoittaisi uudelleenkäytettävyyttä.
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")
Tämä lähestymistapa varmistaa, että dekorattorisi voi kääriä minkä tahansa funktion, tehden koodistasi sekä vankkaa että uudelleenkäytettävää.
1. Mikä on @-symbolin tarkoitus Pythonissa?
2. Miten dekoraattori muuttaa funktion toimintaa?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme