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

bookIntroduction to Decorators

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

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.

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

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.

  • *args kerää kaikki ylimääräiset paikka-argumentit tupleen;
  • **kwargs kerää 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ä.

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

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?

question mark

Mikä on @-symbolin tarkoitus Pythonissa?

Valitse oikea vastaus

question mark

Miten dekoraattori muuttaa funktion toimintaa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Osio 4. Luku 1
some-alt