Hvis du indstiller et standardargument i en Python-funktionsdefinition, bruges standardværdien, hvis argumentet udelades under et funktionskald.
Følgende oplysninger er beskrevet nedenfor.
- Indstilling af standardargumenter
- Begrænsninger for placeringen af standardargumenter
- Bemærk, at når en liste eller ordbog anvendes som standardværdi
Indstilling af standardargumenter
Hvis argumentnavn = standardværdi i funktionsdefinitionen, vil standardværdien blive anvendt, når det tilsvarende argument udelades.
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
Begrænsninger for placeringen af standardargumenter
Hvis du placerer et standardargument før et normalt argument (et argument, for hvilket der ikke er angivet nogen standardværdi), når du definerer en funktion, opstår der en fejl.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Bemærk, at når en liste eller ordbog anvendes som standardværdi
Hvis et objekt, der kan opdateres (ændres), f.eks. en liste eller en ordbog, er angivet som standardværdi, oprettes dette objekt, når funktionen defineres. Når funktionen derefter kaldes uden det tilsvarende argument, anvendes det samme objekt.
Standardargumentværdierne evalueres fra venstre mod højre, når funktionsdefinitionen udføres. Det betyder, at standardargumentudtrykket kun evalueres én gang, når funktionen defineres, og at den samme “beregnede” værdi anvendes ved hvert kald.
8.7. Function definitions — Python 3.10.2 Documentation
Hvis der f.eks. defineres en funktion, der tager en liste eller en ordbog som standardargument og tilføjer elementer til den, og som kaldes flere gange uden dette argument, vil elementer blive tilføjet til det samme objekt gentagne gange.
Eksempel på en notering.
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]
Eksempel for en ordbog.
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}
Der oprettes et nyt objekt, hver gang funktionen kaldes.
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]