Nastavenie predvoleného argumentu v definícii funkcie jazyka Python spôsobí, že sa použije predvolená hodnota, ak je argument počas volania funkcie vynechaný.
Nižšie sú opísané tieto podrobnosti.
- Nastavenie predvolených argumentov
- Obmedzenia týkajúce sa pozície predvolených argumentov
- Všimnite si, že ak sa ako predvolená hodnota použije zoznam alebo slovník
Nastavenie predvolených argumentov
Ak je v definícii funkcie názov argumentu = predvolená hodnota, po vynechaní príslušného argumentu sa použije predvolená hodnota.
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
Obmedzenia týkajúce sa pozície predvolených argumentov
Umiestnenie predvoleného argumentu pred normálny argument (argument, pre ktorý nie je zadaná predvolená hodnota) pri definovaní funkcie vedie k chybe.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Všimnite si, že ak sa ako predvolená hodnota použije zoznam alebo slovník
Ak je ako predvolená hodnota zadaný aktualizovateľný (meniteľný) objekt, napríklad zoznam alebo slovník, tento objekt sa vytvorí pri definovaní funkcie. Potom, keď sa funkcia zavolá bez príslušného argumentu, použije sa ten istý objekt.
Predvolené hodnoty argumentov sa pri vykonávaní definície funkcie vyhodnocujú zľava doprava. To znamená, že výraz predvoleného argumentu sa pri definovaní funkcie vyhodnotí iba raz a pri každom volaní sa použije rovnaká „vypočítaná“ hodnota.
8.7. Function definitions — Python 3.10.2 Documentation
Ak je teda napríklad definovaná funkcia, ktorá ako predvolený argument preberá zoznam alebo slovník a pridáva do neho prvky, a je volaná viackrát bez tohto argumentu, prvky sa opakovane pridávajú do toho istého objektu.
Príklad výpisu.
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]
Príklad slovníka.
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}
Pri každom volaní funkcie sa vytvorí nový objekt.
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]