Python: függvények

Programozás Python

Az eljárások és függvények utasítások sorozatából állnak, melyeket többször is fel tudunk használni. Segítségükkel átláthatóbb lehet a program, és nem kell ugyanazt a kódrészletet többször is megírni. Az eljárások és a függvények csak akkor kerülnek végrehajtásra, ha lefuttatjuk őket. Ezt a nevükkel tudjuk megtenni. Például a print() függvényt már elég sokszor használtuk. A Pythonban technikailag nincs külön „eljárás”, minden def kulcsszóval létrehozott blokk függvény, függetlenül attól, hogy van-e return utasítás. Pedagógiai szempontból célszerű volt külön választani őket.

Eljárások

Az eljárások olyan blokkok, amelyek végrehajtják a bennük található utasításokat, de nem térnek vissza semmilyen értékkel. Például kiírnak valamit, vagy adatot kérnek be. Az eljárásokat a def kulcsszóval lehet definiálni, majd a nevük segítségével hívhatók meg. Első példa: csinálunk egy udv nevű eljárást, ami kírja, hogy Helló! Ez egy paraméter nélküli eljárás, nem kap semmilyen adatot, egyszerűen csak végrehajtja a benne található utasítást.
A függvény nevének betűvel, vagy alulvonással kell kezdődnie, és betúket, számokat, alulvonást tartalmazhat. Figyeljünk a kis és nagybetűkre az elnevezéseknél!

Paraméterek

Paraméter: adhatunk adatokat is egy eljárásnak, amivel tud „dolgozni”. Alapvetően annyi paramétert várunk, amennyit megadunk a függvény létrehozásakor. Paraméter bármilyen típusú adat lehet: string, number, list, dictionary… ) Adjunk az üdvözlő eljárásunknak egy nevet paraméterként! Paramétereket a zárójelbe tudunk megadni. Lehet többet is!

A paramétereknél meg lehet adni kulcsszavakat (keywords) is, amivel biztosítjuk, hogy melyik érték melyik paraméterhez tartozik! Ilyenkor nem muszáj sorrendben írni, hiszen a ‘kulcs’ egyértelműen azonosítja, melyik érték tartozik hozzá.

Meg lehet hívni vegyesen is a paramétereket, kulcsszavakkal és sorrend használatával.

Meg lehet adni típust is:

Megadhatunk akár listát is paraméternek. Összegezzük egy lista elemeit!

A paramétereknek lehet megadni alapértelmezett értéket is. Pl: adott falfelületet mennyiért burkolnak? Alapértelmezett érték 7800Ft/nm. Ha nem adjuk meg a 3. paramétert, akkor ezzel számol.

Dokstring használata: komment a függvényben:

Args és kwargs avagy a csillagok

Pythonban az *args és a **kwargs két olyan speciális kifejezés, amivel a függvényeinket rendkívül rugalmassá tehetjük. Lehetővé teszik, hogy változó számú argumentumot adjunk át egy függvénynek. Nem kell előre tudni, hogy 2, 5 vagy 100 adatot fogunk felhasználni, ezek az eszközök „összecsomagolják” azokat. A * iterálható adattípusba (tuple) kicsomagolást a ** szótárba (dictionary) kicsomagolást végez.

*args: akkor használjuk, ha sima (név nélküli) listát akarsz átadni. A függvényen belül az értékeket egy tuple (módosíthatatlan lista) formájában kapjuk meg.

**kwargs: ezzel kulcsszavakat rendelünk az értékekhez, szótárként (dictionary) kezeli az adatokat.

Természetesen bármelyiket használhatjuk akár egyszerre is, tehát lehet sima paraméterünk, args és kwargs is egy függvényben.

Globális és lokális változók

Az eljárásokban és függvényekben használt változók olyan változók, amik csak az adott blokkban léteznek. Tehát csak ott láthatóak, elérhetők. Pl. az ar változó csak a kalkulator eljáráson belül elérhető. A globális változók az adott programon belül bárhonnan elérhetőek.

Függvények

A függvények hasonlóan működnek, mint az eljárások, de a fő különbség az, hogy a függvények visszaadnak valamilyen értéket. A return utasításról lehet könnyen felismerni egy függvényt. A függvény visszatérési értékét el lehet menteni példul egy változóba. Nézzünk egy példa függvényt, ami a téglalap kerületét számolja ki.

Számoljuk ki egy számsorozat maximumát függvény segítségével! Ha nem tudjuk, hogy mennyi paramétert (argumentumot) fogunk használni, akkor használjuk a *-ot!

Egy függvénynek lehet több visszatérési értéke, tuple típusként. Ezekre az indexükkel lehet hivatkozni. Például keressük meg egy lista első és utolsó elemét függvény segítségével!

Beágyazott függvények és Python‑bezárások (closures)

Beágyazott függvénynek nevezzük azt a függvényt, amely egy másik függvényen belül van definiálva. A beágyazott függvény csak a külső függvényen belül érhető el, így segít elrejteni logikát (enkapszuláció),
szervezettebb, moduláris kódot írni.

Mi az a bezárás (closure)? Egy olyan függvény, amely hozzáfér a külső (nem globális) függvény lokális változóihoz még akkor is, ha a külső függvény már befejezte a futását. A closure tulajdonképpen „bezárja” (megjegyzi) azt a környezetet, amelyben létrejött. A nonlocal segítségével a belső függvény módosíthatja a külső függvény változóit.

n értéke: 2 (a szorzo(2) hívásból)
x értéke: 5 (a dupla(5) hívásból)
dupla egy olyan függvény, ami szoroz 2-vel

Bankszámla: Készíts egy bank_szamla(kezdo_osszeg) függvényt, amely visszaad két függvényt:
betesz(x), kivesz(x)
Ezek módosítsák a zárt változóban tárolt egyenleget! A belső változóhoz kívülről ne lehessen hozzáférni!

Tehát az egyenleg nem érhető el, mert nem globális, csak a closure-ön belül él. Az adat el van zárva, csak engedélyezett műveleteken keresztül férsz hozzá!

Ha le akarjuk kérni az egyenleget, akkor kell egy lekerdez() függvény, és ezt a 3. paramétert is használni kell a számla létrehozásánál! Utána már simán lekerdez() és megvan az aktuális egyenleg.

Rekurzió

A rekurzió azt jelenti, hogy egy függvény önmagát hívja meg. Ebben az esetben általában valamilyen feltétel vizsgálatot is használni kell, hogy ne írjunk végtelen ciklust. A rekurzió hatékony megoldást jelenthet olyan problémákra, amelyek természetükből adódóan ismétlődőek és strukturáltak.

Általában a faktoriális számítással szokták szemléltetni.

Lambda

A Python lambda egy egysoros névtelen (anonim) függvény, általában rövid kódrészletekhez használjuk. A lambda kulcsszóval definiáljuk. A következő példában a paraméterként kapott számhoz hozzáad 10-et.

x = lambda a : a + 10
print(x(10)) # eremény: 20

Adjunk össze 3 számot lambda segítségével:

x = lambda a, b, c : a + b + c
print(x(5, 6, 2))

A lambda erőssége az, hogy felhasználhatjuk függvényekben. Duplázzuk, triplázzuk meg a megadott számot!

def fuggveny(n):
  return lambda a : a * n
duplazz = fuggveny(2)
triplazz = fuggveny(3)
print(duplazz(10))
print(triplazz(10))

Számoljuk ki egy lista minden elemének a négyzetét lambda segítségével!

szamok = [1, 2, 3, 4, 5]
# A map() függvény az összes elemre alkalmazza a lambda függvényt
szamok_negyzete = list(map(lambda x: x**2, szamok))
# Kiírjuk a lista elemeit
print(szamok_negyzete) # eredmény: [1, 4, 9, 16, 25]

Python beépített függvények, modulok

Egy részükkel már találkoztunk, pl. print(), input(), random()
Megnézünk még néhány hasznosat, amit sűrűn használunk.

math modul

math.sqrt(x)Négyzetgyök (Square Root)
math.pi A pi konstans értéke.
math.sin(x) Szinusz (Sine) számítása x radiánra
math.ceil(x) Felső egész (Ceiling): A legkisebb egész szám, ami nagyobb vagy egyenlő x-szel
math.floor(x) Alsó egész (Floor): A legnagyobb egész szám, ami kisebb vagy egyenlő x-szel.
math.factorial(x) Faktoriális számítása x-re (x!)
math.log(x, base) Logaritmus számítása x-re a megadott base alapon. Alapértelmezett alap az e (természetes logaritmus).

Datetime modul: Dátum és idő kezelése

datetime.datetime.now() Az aktuális helyi dátumot és időpontot adja vissza.
datetime.date.today() Az aktuális helyi dátumot adja vissza.
datetime.datetime(y, m, d, h, min, s) Egy specifikus dátum/idő objektum létrehozása.
datetime.timedelta(days=x, seconds=y, …) Két időpont közötti különbséget vagy időtartamot jelöli.
datetime_obj.strftime(format) Egy datetime objektum formázása stringgé (pl. „%Y-%m-%d”).
datetime.datetime.strptime(string, format) Egy string átalakítása datetime objektummá

Példa: prímszám ellenőrzés. Döntse el a függvény, hogy a megadott szám prím szám-e?

Frissítve: 2026.02.03.