Argomenti Solo Posizionali
Continuando a esplorare Python, ti imbatterai nel concetto di argomenti delle funzioni. In Python, ci sono diversi modi per passare argomenti a una funzione. Possiamo avere argomenti di default, argomenti per parola chiave e argomenti posizionali. Ma c'è un tipo specifico di argomento che può essere fornito solo per posizione e non per parola chiave, noto come argomenti solo posizionali.
A partire da Python 3.8, esiste una sintassi speciale
/
nelle definizioni di funzione per indicare che alcuni argomenti sono solo posizionali. Gli argomenti solo posizionali appaiono prima di un /
nella definizione della funzione.Considera questa funzione che somma tre numeri:
def add_numbers(a, b, c):
return a + b + c
Possiamo chiamare questa funzione fornendo gli argomenti nell'ordine in cui sono definiti, cioè per posizione:
print(add_numbers(10, 20, 30))
# outputs: 60
E possiamo anche chiamarla usando i nomi degli argomenti, cioè per parola chiave:
print(add_numbers(a=10, b=20, c=30))
# outputs: 60
Ma cosa succede se vogliamo assicurarci che alcuni argomenti siano sempre forniti in un ordine specifico? È qui che entrano in gioco gli argomenti solo posizionali. Modifichiamo la funzione
add_numbers
per rendere a
e b
solo posizionali:def add_numbers(a, b, /, c):
return a + b + c
Ora possiamo ancora chiamare questa funzione con argomenti per posizione:
print(add_numbers(10, 20, 30)) # 60
print(add_numbers(a=10, b=20, c=30)) # TypeError
print(add_numbers(10, 20, c=30)) # 60
Tuttavia, se proviamo a chiamarla con gli argomenti solo posizionali come argomenti per parola chiave, otterremo un
TypeError
. In questo caso, dobbiamo fornire a
e b
per posizione. L'argomento c
può essere fornito sia per posizione che per parola chiave.Quindi, la sintassi per gli argomenti solo posizionali è:
- Gli argomenti solo posizionali vengono prima di un
/
nella definizione della funzione.
- Se
/
è presente nella definizione della funzione, gli argomenti prima di esso sono solo posizionali.
- Gli argomenti solo posizionali non possono essere passati per parola chiave.
- Gli argomenti dopo
/
possono essere passati per posizione o per parola chiave.
Esistono funzioni integrate in Python che hanno argomenti solo posizionali?
Sì, molte funzioni integrate di Python hanno argomenti solo posizionali. Ad esempio, la funzione
abs()
è un buon esempio:help(abs)
# Help on built-in function abs in module builtins:
# abs(x, /)
# Return the absolute value of the argument.
abs(-6) # 6
abs(x=-6) # TypeError: abs() takes no keyword arguments
Il parametro
x
in abs
è un argomento solo posizionale e quando proviamo a passarlo alla chiamata della funzione come argomento per parola chiave, il programma genera un TypeError
.