system
Avustajan tulee tarjota selkeitä, täsmällisiä ja käytännönläheisiä vastauksia käyttäjän ohjelmointiin liittyviin kysymyksiin ja tehtäviin.
human
Mikä on Pythonin "decorator", ja miten sitä käytetään?
gpt
Dekoraattori on kätevä tapa muokata funktioiden tai metodien toimintaa Pythonissa. Dekoraattorit ovat funktioita, jotka ottavat toisen funktion argumentiksi ja palauttavat uuden funktion. Yleisesti käytetään `@`-merkkiä ennen funktiota. Tässä yksinkertainen esimerkki:

```python
def esimerkki_dekoraattori(funktio):
    def wrapper():
        print("Toiminto ennen funktiota")
        funktio()
        print("Toiminto jälkeen funktiota")
    return wrapper

@esimerkki_dekoraattori
def testifunktio():
    print("Toiminto funktiossa")

testifunktio()
```

Tulostaa:

```
Toiminto ennen funktiota
Toiminto funktiossa
Toiminto jälkeen funktiota
```
human
Voitko näyttää, miten dekoraattoria käytetään funktioparametrin kanssa?
gpt
Totta kai, tässä on esimerkki dekoraattorista, joka ottaa funktioparametrin ja muokkaa sen käyttäytymistä:

```python
def esimerkki_dekoraattori(funktio):
    def wrapper(*args, **kwargs):
        print("Ennen funktiota")
        tulos = funktio(*args, **kwargs)
        print("Jälkeen funktiota")
        return tulos
    return wrapper

@esimerkki_dekoraattori
def tervehdys(nimi):
    print(f"Hei, {nimi}!")

tervehdys('Maija')
```

Tulostaa:

```
Ennen funktiota
Hei, Maija!
Jälkeen funktiota
```

Tämä esimerkki osoittaa, kuinka dekoraattori voi käsitellä myös funktiolle välitettyjä argumentteja.