Obljubljena naloga iz dekoratorjev
Dekorator v_float1
Napiši dekorator v_float1
, s katerim lahko dekoriramo funkcije, ki imajo
en sam argument. Dekorator naj funkcijo dekorira tako, da pred klicem
funkcije spremeni njen argument v float
.
Dekorator bi lahko uporabili tako
@v_float1
def kvadrat(x):
return x ** 2
in potem klicali
kvadrat("12")
Seveda pa mora še vedno delati tudi
kvadrat(4)
Poglej
rešitve nalog, ki
smo jih delali skupaj. Tam smo z dekoratorjem poklicali funkcijo in nato
spreminjali njen rezultat (zaokrožili smo ga z round
). Tu pa pustimo rezultat
pri miru in pred klicem spreminjamo argumente.
Dekorator v_float
Ta dekorator dela isto, le s funkcijami, ki prejmejo poljubno število
argumentov. Vse mora spremeniti v float
, da bomo lahko funkcijo
@v_float
def hipo(a, b):
from math import sqrt
return sqrt(a ** 2 + b ** 2)
klicali z
hipo(3, 4)
hipo(3, "4")
hipo("3", "4")
hipo("3", 4)
Dekorator v
Ta je pa za kravžljanje možganov (a ne bo prehudo, če preberete prej omenjene rešitve nalog, kjer smo že naredili nekaj podobnega.
Namesto da bi vedno pretvarjal v float
, pretvarja v tisto, kar damo kot
argument dekoratorju.
Če napišemo
@v(float)
def hipo(a, b):
from math import sqrt
return sqrt(a ** 2 + b ** 2)
se hipo
obnaša enako kot prej, poleg tega pa lahko napišemo, recimo
s = [4, 5, 6]
@v(int)
def k_ti(k):
return s[k]
in argument (k
) se pretvarja v int
.