Az alapértelmezett argumentum beállítása egy Python-funkció definíciójában azt eredményezi, hogy az alapértelmezett értéket kell használni, ha az argumentum kimarad a függvényhívás során.
Az alábbiakban a következő részleteket ismertetjük.
- Alapértelmezett argumentumok beállítása
- Az alapértelmezett argumentumok pozíciójára vonatkozó korlátozások
- Vegye figyelembe, hogy ha egy listát vagy szótárat használ alapértelmezett értékként
Alapértelmezett argumentumok beállítása
Ha az argumentum neve = alapértelmezett érték a függvénydefinícióban, akkor az alapértelmezett értéket fogja használni, ha a megfelelő argumentumot elhagyja.
def func_default(arg1, arg2='default_x', arg3='default_y'): print(arg1) print(arg2) print(arg3) func_default('a') # a # default_x # default_y func_default('a', 'b') # a # b # default_y func_default('a', arg3='c') # a # default_x # c
Az alapértelmezett argumentumok pozíciójára vonatkozó korlátozások
Ha egy függvény definiálásakor alapértelmezett argumentumot helyezünk egy normál argumentum elé (olyan argumentum, amelyhez nincs megadva alapértelmezett érték), az hibát eredményez.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Vegye figyelembe, hogy ha egy listát vagy szótárat használ alapértelmezett értékként
Ha egy frissíthető (módosítható) objektum, például egy lista vagy szótár van megadva alapértelmezett értékként, akkor ez az objektum a függvény definiálásakor létrejön. Ezután, amikor a függvényt a megfelelő argumentum nélkül hívjuk meg, ugyanazt az objektumot használjuk.
Az alapértelmezett argumentumértékek a függvénydefiníció végrehajtásakor balról jobbra haladva kerülnek kiértékelésre. Ez azt jelenti, hogy az alapértelmezett argumentum kifejezés csak egyszer kerül kiértékelésre a függvény definiálásakor, és minden egyes hívásnál ugyanazt a “számított” értéket használja.
8.7. Function definitions — Python 3.10.2 Documentation
Így például, ha egy olyan függvényt definiálunk, amely egy listát vagy szótárt vesz fel alapértelmezett argumentumként, és elemeket ad hozzá, és többször is meghívjuk az argumentum nélkül, akkor az elemek többször is hozzáadódnak ugyanahhoz az objektumhoz.
Példa egy listázásra.
def func_default_list(l=[0, 1, 2], v=3): l.append(v) print(l) func_default_list([0, 0, 0], 100) # [0, 0, 0, 100] func_default_list() # [0, 1, 2, 3] func_default_list() # [0, 1, 2, 3, 3] func_default_list() # [0, 1, 2, 3, 3, 3]
Példa egy szótárra.
def func_default_dict(d={'default': 0}, k='new', v=100): d[k] = v print(d) func_default_dict() # {'default': 0, 'new': 100} func_default_dict(k='new2', v=200) # {'default': 0, 'new': 100, 'new2': 200}
A függvény minden egyes hívásakor új objektum jön létre.
def func_default_list_none(l=None, v=3): if l is None: l = [0, 1, 2] l.append(v) print(l) func_default_list_none() # [0, 1, 2, 3] func_default_list_none() # [0, 1, 2, 3]