Vaikimisi argumendi määramine Pythoni funktsiooni definitsioonis põhjustab vaikimisi väärtuse kasutamise, kui argument jäetakse funktsioonikõne ajal välja.
Allpool on kirjeldatud järgmisi üksikasju.
- Vaikimisi argumentide seadistamine
- Piirangud vaikimisi argumentide positsioonile
- Pange tähele, et kui vaikeväärtusena kasutatakse nimekirja või sõnastikku
Vaikimisi argumentide seadistamine
Kui funktsiooni definitsioonis on argumendi nimi = vaikeväärtus, kasutatakse vaikeväärtust, kui vastav argument on välja jäetud.
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
Piirangud vaikimisi argumentide positsioonile
Vaikimisi argumendi paigutamine enne tavalist argumenti (argument, millele ei ole vaikimisi väärtust määratud) funktsiooni defineerimisel põhjustab vea.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Pange tähele, et kui vaikeväärtusena kasutatakse nimekirja või sõnastikku
Kui vaikeväärtusena on määratud uuendatav (muutuv) objekt, näiteks nimekiri või sõnastik, siis luuakse see objekt funktsiooni defineerimisel. Seejärel, kui funktsiooni kutsutakse ilma vastava argumendita, kasutatakse sama objekti.
Vaikimisi argumentide väärtusi hinnatakse funktsiooni määratluse täitmisel vasakult paremale. See tähendab, et vaikimisi argumendi väljendit hinnatakse funktsiooni defineerimisel ainult üks kord ja iga üleskutse puhul kasutatakse sama “arvutatud” väärtust.
8.7. Function definitions — Python 3.10.2 Documentation
Seega, kui näiteks defineeritakse funktsioon, mis võtab vaikimisi argumendiks loendi või sõnastiku ja lisab sinna elemente, ja seda kutsutakse mitu korda ilma selle argumendita, lisatakse elemendid samale objektile korduvalt.
Näide loetelust.
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]
Näide sõnaraamatu kohta.
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}
Iga kord, kui funktsiooni kutsutakse, luuakse uus 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]