Om du anger ett standardargument i en Python-funktionsdefinition används standardvärdet om argumentet utelämnas under ett funktionsanrop.
Nedan följer en beskrivning av följande uppgifter.
- Fastställande av standardargument
- Begränsningar av positionen för standardargument
- Observera att när en lista eller ett lexikon används som standardvärde
Fastställande av standardargument
Om argumentnamn = standardvärde i funktionsdefinitionen används standardvärdet när motsvarande argument utelämnas.
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änsningar av positionen för standardargument
Om du placerar ett standardargument före ett normalt argument (ett argument för vilket inget standardvärde anges) när du definierar en funktion uppstår ett fel.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Observera att när en lista eller ett lexikon används som standardvärde
Om ett uppdaterbart (föränderligt) objekt, t.ex. en lista eller ett lexikon, anges som standardvärde skapas det objektet när funktionen definieras. När funktionen sedan anropas utan motsvarande argument används samma objekt.
Standardargumentvärden utvärderas från vänster till höger när funktionsdefinitionen utförs. Detta innebär att uttrycket för standardargumentet utvärderas endast en gång när funktionen definieras och att samma ”beräknade” värde används för varje anrop.
8.7. Function definitions — Python 3.10.2 Documentation
Om en funktion definieras som tar en lista eller ett lexikon som standardargument och lägger till element i den, och sedan anropas flera gånger utan det argumentet, kommer element att läggas till samma objekt upprepade gånger.
Exempel på en förteckning.
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]
Exempel på en ordbok.
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}
Ett nytt objekt skapas varje gång funktionen anropas.
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]