Informatika2-2015/Eloadas 3 Python-3 Opcionalis parameter Dokumentacio
Opcionális paraméterek
Python függvények definiálásánál megadhatóak úgynevezett opcionális paraméterek. Ilyent akkor használunk, ha van egy olyan paramétere a függvénynek, ami fontos hogy paraméter legyen, mert időnként megváltoztatjuk, de az esetek túlnyomó többségében ugyanaz az értéke. Ilyenkor adhatunk a paraméternek egy alapértelmezett értéket, és ha a függvényhíváskor azt a paramétert nem kapja meg a függvény, akkor az alapértelmezett értéket használja. Például:
>>> def atment(pontok, hatar = 40, sorban = True): ... nevek = [nev for nev in pontok if pontok[nev] >= hatar] ... if sorban: ... nevek.sort() ... return nevek ... >>> erdei_pontok = { ... "Roka" : 85, ... "Medve" : 20, ... "Nyuszi" : 95, ... "Farkas" : 45, ... "Suni" : 55} >>> print atment(erdei_pontok, 10, False) ['Medve', 'Farkas', 'Nyuszi', 'Suni', 'Roka'] >>> print atment(erdei_pontok) ['Farkas', 'Nyuszi', 'Roka', 'Suni'] >>> print atment(erdei_pontok, 10) ['Farkas', 'Medve', 'Nyuszi', 'Roka', 'Suni']
Mint látható, kihagyható az összes opcionális paraméter, vagy csak néhány.
Előfordulhat viszont, hogy csak a későbbi paramétert akarjuk megadni, a korábbit nem. Ezért találták ki a név szerinti paraméter átadást:
>>> print atment(erdei_pontok, hatar=10, sorban=False) ['Medve', 'Farkas', 'Nyuszi', 'Suni', 'Roka'] >>> print atment(erdei_pontok, sorban=False) ['Farkas', 'Nyuszi', 'Suni', 'Roka']
Sőt, ha akarjuk, a normális ("kötelező") paramétereket is adhatjuk át így név szerint (a másik módszert úgy hívják, hogy pozíció szerint):
>>> print atment(pontok=erdei_pontok) ['Farkas', 'Nyuszi', 'Roka', 'Suni']Python Tutor link
Másik előnye a név szerinti megadásnak, hogy elég annak a paraméternek a nevére emlékezni amit meg akarunk adni. Például ha megnézzük a beépített könyvtárban a pprint függvényt, elég sok paramétere van, ezek közül a stream pl. olyan dologgal foglalkozik amit még nem tanultunk. Azonban elég ha a width paramétert megértjük ahhoz hogy azt használni tudjuk.
>>> import pprint >>> pprint.pprint(erdei_pontok) {'Farkas': 45, 'Medve': 20, 'Nyuszi': 95, 'Roka': 85, 'Suni': 55} >>> pprint.pprint(erdei_pontok, width=20) {'Farkas': 45, 'Medve': 20, 'Nyuszi': 95, 'Roka': 85, 'Suni': 55}
Azért néhány korlátozás van:
- Logikusan, csak az opcionális paramétereket lehet elhagyni, minden normális paraméternek értéket kell adni, vagy név szerint, vagy pozíció szerint.
- Ha név szerint és pozició szerint is akarunk megadni paramétert, mindenképpen előbb kell a pozició szerintieknek lennie. Ez nem megengedett:
>>> print atment(pontok=erdei_pontok, 10) File "<stdin>", line 1 SyntaxError: non-keyword arg after keyword arg
Könyvtárak
Az olyan programokat, amik magukban nem használhatóak, csak más programok megírásában segítenek, könyvtáraknak hívjuk