Impostare un argomento di default in una definizione di funzione Python fa sì che il valore di default venga usato se l'argomento viene omesso durante una chiamata di funzione.
I seguenti dettagli sono descritti di seguito.
- Impostare gli argomenti predefiniti
- Vincoli sulla posizione degli argomenti predefiniti
- Si noti che quando un elenco o un dizionario è usato come valore predefinito
Impostare gli argomenti predefiniti
Se il nome dell'argomento = valore predefinito nella definizione della funzione, il valore predefinito sarà usato quando l'argomento corrispondente è omesso.
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
Vincoli sulla posizione degli argomenti predefiniti
Mettere un argomento predefinito prima di un argomento normale (un argomento per il quale non è specificato alcun valore predefinito) quando si definisce una funzione provoca un errore.SyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
Si noti che quando un elenco o un dizionario è usato come valore predefinito
Se un oggetto aggiornabile (mutabile) come una lista o un dizionario è specificato come valore predefinito, quell'oggetto sarà creato quando la funzione è definita. Poi, quando la funzione viene chiamata senza l'argomento corrispondente, viene utilizzato lo stesso oggetto.
I valori degli argomenti predefiniti sono valutati da sinistra a destra quando la definizione della funzione viene eseguita. Ciò significa che l'espressione dell'argomento predefinito viene valutata solo una volta quando la funzione viene definita, e lo stesso valore “calcolato” viene usato per ogni chiamata.
8.7. Function definitions — Python 3.10.2 Documentation
Così, per esempio, se viene definita una funzione che prende una lista o un dizionario come argomento predefinito e vi aggiunge elementi, e viene chiamata più volte senza questo argomento, gli elementi saranno aggiunti allo stesso oggetto ripetutamente.
Esempio per un annuncio.
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]
Esempio per un dizionario.
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}
Un nuovo oggetto viene creato ogni volta che la funzione viene chiamata.
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]