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.
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!
# 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!
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.
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.
# 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!
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!
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.
# 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.
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]