Postavljanje zadanog argumenta u definiciji Python funkcije uzrokuje korištenje zadane vrijednosti ako se argument izostavi tijekom poziva funkcije.
Sljedeći detalji su opisani u nastavku.
- Postavljanje zadanih argumenata
- Ograničenja položaja zadanih argumenata
- Imajte na umu da kada se kao zadana vrijednost koristi popis ili rječnik
Postavljanje zadanih argumenata
Ako je naziv argumenta = zadana vrijednost u definiciji funkcije, zadana vrijednost će se koristiti kada se odgovarajući argument izostavi.
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
Ograničenja položaja zadanih argumenata
Postavljanje zadanog argumenta ispred normalnog argumenta (argumenta za koji nije navedena zadana vrijednost) prilikom definiranja funkcije rezultira pogreškom.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Imajte na umu da kada se kao zadana vrijednost koristi popis ili rječnik
Ako je objekt koji se može ažurirati (promjenjivi) kao što je popis ili rječnik naveden kao zadana vrijednost, taj će se objekt kreirati kada je funkcija definirana. Zatim, kada se funkcija pozove bez odgovarajućeg argumenta, koristi se isti objekt.
Zadane vrijednosti argumenata procjenjuju se s lijeva na desno kada se izvršava definicija funkcije. To znači da se zadani izraz argumenta evaluira samo jednom kada je funkcija definirana, a ista “izračunata” vrijednost se koristi za svaki poziv.
8.7. Function definitions — Python 3.10.2 Documentation
Tako, na primjer, ako je definirana funkcija koja uzima popis ili rječnik kao zadani argument i dodaje mu elemente, te se poziva više puta bez tog argumenta, elementi će se više puta dodavati istom objektu.
Primjer za popis.
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]
Primjer za rječnik.
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}
Novi objekt se kreira svaki put kada se funkcija pozove.
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]