Het instellen van een standaard argument in een Python functiedefinitie zorgt ervoor dat de standaard waarde wordt gebruikt als het argument wordt weggelaten tijdens een functie-aanroep.
De volgende details worden hieronder beschreven.
- Standaard argumenten instellen
- Beperkingen op de positie van standaardargumenten
- Merk op dat wanneer een lijst of woordenboek wordt gebruikt als de standaardwaarde
Standaard argumenten instellen
Indien argumentnaam = standaardwaarde in de functiedefinitie, zal de standaardwaarde gebruikt worden wanneer het overeenkomstige argument weggelaten wordt.
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
Beperkingen op de positie van standaardargumenten
Het plaatsen van een standaard argument vóór een normaal argument (een argument waarvoor geen standaard waarde is gespecificeerd) bij het definiëren van een functie resulteert in een fout.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Merk op dat wanneer een lijst of woordenboek wordt gebruikt als de standaardwaarde
Indien een aanpasbaar (muteerbaar) object, zoals een lijst of woordenboek, wordt gespecificeerd als de standaardwaarde, dan zal dat object worden aangemaakt wanneer de functie wordt gedefinieerd. Wanneer de functie dan wordt aangeroepen zonder het overeenkomstige argument, wordt hetzelfde object gebruikt.
Standaard argumentwaarden worden van links naar rechts geëvalueerd als de functiedefinitie wordt uitgevoerd. Dit betekent dat de standaard argumentuitdrukking slechts eenmaal wordt geëvalueerd wanneer de functie wordt gedefinieerd, en dat dezelfde “berekende” waarde wordt gebruikt voor elke aanroep.
8.7. Function definitions — Python 3.10.2 Documentation
Indien bijvoorbeeld een functie is gedefinieerd die een lijst of woordenboek als standaardargument neemt en er elementen aan toevoegt, en deze functie wordt meerdere malen aangeroepen zonder dat argument, zullen elementen herhaaldelijk aan hetzelfde object worden toegevoegd.
Voorbeeld van een lijst.
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]
Voorbeeld voor een woordenboek.
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}
Telkens wanneer de functie wordt aangeroepen, wordt een nieuw object aangemaakt.
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]