Kihagyás

Függvények

Függvénydefiníció

Pythonban is van lehetőségünk saját függvényeket definiálnunk, majd ezeket később használnunk, meghívnunk.

A függvénydefiníció szintaxisa a következő (a szögletes zárójelek közötti részek elhagyhatók):

1
2
3
def fuggveny_neve([param1, param2, ...]):
    utasitasok
    [return visszateresi_ertek]

Itt is használjuk a Python blokkszintaxist, és a függvény törzsét beljebb indentáljuk.

A függvényeink vissza is térhetnek valamilyen értékkel. Ezt a visszatérési értéket a return kulcsszó után adhatjuk meg.

Függvényhívás

A függvények meghívásakor a szokásos szintaxist használjuk:

1
fuggveny_neve([param1, param2, ...])

Ahogy azt már más nyelvekben megszokhattuk, a függvényhívás során átadjuk a függvénynek a bemeneti paramétereket (feltéve ha a kérdéses függvény vár paramétert).

Default paraméterek

Javában lehetőségünk volt több ugyanolyan nevű függvényt definiálni, feltéve ha eltérő volt azok paraméterezése. A függvényhívás során is a paraméterezés döntötte el, hogy az azonos nevű függvények közül melyik került meghívásra. Ezt neveztük function overload-nak.

A Python nem támogatja a function overload-ot (még eltérő paraméterezés esetén sem). Azonos nevű függvények esetén a kódban legkésőbb definiált függvény lesz hívható.

1
2
3
4
5
6
7
8
def hello():
    print("Hello World!")

def hello(nev):
    print("Hello " + nev + "!")

# hello()               # HIBA!!!
hello("Béla")

Kimenet

Hello Béla!

Mivel a fenti kódban két hello névre hallgató függvényünk is van, ezért ezek közül a legutoljára definiált, 1 paramétert váró hello(nev) függvény lesz hívható. Ha a korábban definiált, 0 paraméteres hello() függvényt próbáljuk meghívni, hibát kapunk.

A gyakorlatban viszont sokszor felmerül az igény arra, hogy egy függvényt akár eltérő paraméterszámmal is meg tudjunk hívni. Szerencsére a Python biztosít erre egy megoldást, mégpedig a default függvényparamétereket.

A default paraméterek lényege, hogy a függvény bizonyos paramétereinek alapértelmezett értéket adunk a függvénydefiníció során. Ha a függvényhíváskor nem adjuk meg az adott paraméter értékét, akkor az az alapértelmezett értéket veszi fel.

1
2
3
4
5
def hello(nev="Senki"):
    print("Hello " + nev + "!")

hello()     
hello("Béla")                       

Kimenet

Hello Senki! Hello Béla!

A fenti kódban először paraméter nélkül hívjuk meg a hello függvényt. Mivel a paraméterváltozónknak nem adtunk át értékét, ezért az az alapértelmezett "Senki" szöveget fogja felvenni. A második függvényhívásnál már megadtuk a paraméter értékét ("Béla"), ebben az esetben természetesen ezt fogjuk használni a függvényen belül (nem a default értéket).

A default paraméterek kapcsán van egy fontos szabály, amit be kell tartanunk: ha nem minden függvényparaméternek adunk alapértelmezett értéket, akkor mindig az utolsó néhány paraméternek kell default értéket adnunk (azaz a default paraméterek mindig a paraméterlista jobb oldalán szerepelnek).

1
2
3
4
5
6
def osszead(a, b=0, c=0):
    return a + b + c

print(osszead(5))               # 5 + 0 + 0
print(osszead(5, 2))            # 5 + 2 + 0
print(osszead(5, 2, 3))         # 5 + 2 + 3

Kimenet

5 7 10

Nevesített paraméterátadás

Default paraméterek használata esetén lehetőségünk van nevesített paraméterátadásra is a függvényhíváskor. Ekkor az elhagyható paraméterek közül expliciten megmondjuk, hogy melyiknek az értékét akarjuk megadni (név=érték formában).

Ez alapvetően akkor lehet hasznos, ha nem olyan sorrendben szeretnénk megadni a paramétereket, mint ahogy azok a függvény paraméterlistájában szerepelnek, vagy esetleg valahány paraméter értékének megadását ki szeretnénk hagyni a függvényhíváskor.

1
2
3
4
5
6
7
def info(felhasznalonev, jelszo=None, szak=None):
    if jelszo is not None:      # ha megadtuk a jelszo paramétert...
        print(felhasznalonev, "jelszava:", jelszo)
    if szak is not None:        # ha megadtuk a szak paramétert...
        print(felhasznalonev, "szakja:", szak)

info("Károly", szak="proginfó") # nevesített paraméterátadás

Kimenet

Károly szakja: proginfó

A fenti példában a függvényhíváskor értéket adtunk az egyetlen kötelező paraméternek (felhasznalonev), majd nevesített paraméterátadással a legutolsó (szak) paraméternek az értékét állítottuk be. A középső (jelszo) paraméternek nem adtunk értéket, így az az alapértelmezett None értéket veszi fel.

A None érték

A fenti példában szereplő None egy speciális beépített kulcsszó Pythonban. Ez az "üres érték", amit más nyelvekben gyakran null-nak neveznek.


Utolsó frissítés: 2021-09-13 14:05:13