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.
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.
1 2 3 4 |
def udv(): print("Helló!") # eljárás futattása: udv() |
Paraméter: adhatunk adatokat is egy eljárásnak, amivel tud „dolgozni”. Adjunk az üdvözlő eljárásunknak egy nevet paraméterként! Paramétereket a zárójelbe tudunk megadni. Lehet többet is!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# eljárás 1 paraméterrel def udv_nevvel(nev): print("Helló ",nev) # futattás: udv_nevvel("Elek") # eljárás több paraméterrek def udv_teljesnevvel(vezeteknev, kereszntev): print("Helló: ", vezeteknev,keresztnev,sep=" ") udv_teljesnevvel("Teszt","Elek") def osszead(x,y): print("Összeg: ",x+y) osszead(20,30) |
Megadhatunk akár listát is paraméternek. Összegezzük egy lista elemeit!
1 2 3 4 5 6 7 8 |
def osszegezd(lista): osszesen = 0 for szam in lista: osszesen = osszesen + szam print("A számok összege: ", osszesen) szamok = [3, 33, 99, 100] osszegezd(szamok) |
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.
1 2 3 4 5 |
def kalkulator(szelesseg,magassag,nm_ar=7800): ar = szelesseg * magassag *nm_ar print("Burkolás költsége: ",ar) kalkulator(3 , 2.75) kalkulator(3 , 2.75, 12000) |
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.
1 2 3 4 5 6 7 |
# függvény létrehozása def kerulet(a,b): return (a+b)*2 k = kerulet(10,10) print("Kerület: ",kerulet(10,30)) print("Kerület: ",k) |
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!
1 2 3 4 5 6 7 8 9 |
def osszeg(x , *args): max = x for szam in args: if szam in args: if szam > max: max = szam return max print("Maximum: ",osszeg(2,33,55,44,77,66,88,100)) |
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!
1 2 3 4 5 6 7 8 |
def szelek(lista): eleje = lista[0] vege = lista[-1] return (eleje, vege) szamok = [2,4,6,8,10,13] print(szelek(szamok)) #ebben az esetben a kimenet (2,13) e,v = szelek(szamok) # az e változóban lesz az eleje, a v változóban a lista vege print("Lista első eleme: ", e, "lista utolsó eleme: ",v) # kimenet: 2 13 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Rekurzió: faktoriális számítás # n! n=0 1 # n>0 n*(n-1)! def fakt(n): if n == 0: return 1 else: return n * fakt(n - 1) print(fakt(5)) # kimenet: 120 # kicsit formázzuk meg a kiírást, nézzük meg hogyan számol def ertek(): for i in range(0, 5): print(f"{i}! = {fakt(i)}") ertek() |
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.
1 2 |
x = lambda a : a + 10 print(x(10)) # eremény: 20 |
Adjunk össze 3 számot lambda segítségével:
1 2 |
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!
1 2 3 4 5 6 7 |
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!
1 2 3 4 5 |
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] |