Python: eljárások, függvények

10. osztály 10.évf Python 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.

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]