Kuidas kasutada ja märkida vaikimisi argumente Pythoni funktsioonides

Äri

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]
Copied title and URL