Azzal bizonyára tisztában vagy, hogy a Pythonban minden objektum. Az objektumok pedig attribútumokkal rendelkeznek, amelyek képviselhetnek adatot (pl. szám, karakterlánc), de tartalmazhatnak futtatható kódot. Ezek a hívható (callable) objektumok.
Tehát a függvények is objektumok, ezért alapból is rendelkeznek bizonyos speciális attribútumokkal. Ilyen többek között __name__, amely a függvény definíciójában megadott nevét adja vissza, vagy például a __doc__, amely értéke a függvény feladatát és paramétereit ismertető dokumentációs karaktersorozat.
A saját magunk által definiált függvényekhez ezeken felül meghatározhatunk egyedi attribútumokat is.
A kérdés, hogy mi értelme lehet ennek? A kérdés azért merülhet fel, mert egy függvény lényegét a paraméterek, a függvénytörzsben egy hívás hatására lefutó utasítássor, és az ennek eredményeképpen előálló visszatérési érték adja. Kell ezentúl bármi jellemzőt hozzáadni?
A kérdésre a válasz, hogy nem, nem kell. De lehet, és bizonyos esetekben akár jól is jöhet ez a lehetőség. A Python tudásépítés lépésről lépésre könyvben több alkalmazási lehetőséget láthatunk a függvény metaadatainak megadásától, a függvény belső változói értékének kinyeréséig.
Most illusztrációs céllal egy egyszerű függvényt definiálunk, amely egy derékszögű háromszög adott két befogója alapján kiszámítja az átfogót. Ugyanakkor, a programunkban e függvény minden hívásakor valamiért szükségünk van a befogók és az átfogó négyzetére. Mivel a függvényünk csak az átfogó értékét szabad, hogy visszaadja, ezért az egyes értékek négyzetét különböző attribútumokban tároljuk el, amelyeket a függvény hívása után ki tudunk olvasni. Ezt mutatja az alábbi kód.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def átfogó(a, b): átfogó.a2 = a**2 átfogó.b2 = b**2 átfogó.c2 = átfogó.a2+átfogó.b2 return pow(átfogó.c2, 0.5) # TESZT print(átfogó(3,4)) # Eredmény: 5.0 print(átfogó.a2) # Eredmény: 9 print(átfogó.b2) # Eredmény: 16 print(átfogó.c2) # Eredmény: 25 |
Meg kell azért jegyeznünk, hogy attribútumoknak függvényobjektumokhoz való hozzárendelése nem gyakori programozási technika, aminek részben az az oka, hogy a függvényt jellemző metaadatokat más módon is ki lehet nyerni, másrészt a függvénydefinícióban szereplő algoritmus logikájának áttekinthetőségét zavarhatja az attribútumok definíción belül történő létrehozása. Mindazonáltal ez egy lehetőség, amelyet nem baj, ha ismerünk, és egy adott szituációban alkalmazni is tudunk.