Informatika2-2015/Eloadas 3 Python-3 Opcionalis parameter Dokumentacio

A MathWikiből
A lap korábbi változatát látod, amilyen Csirke (vitalap | szerkesztései) 2015. február 25., 02:00-kor történt szerkesztése után volt.
(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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

Személyes eszközök