Come usare e notare gli argomenti predefiniti nelle funzioni Python

Attività commerciale

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]
Copied title and URL