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 + cPossiamo chiamare questa funzione fornendo gli argomenti nell'ordine in cui sono definiti, cioè per posizione:
print(add_numbers(10, 20, 30))
# outputs: 60E possiamo anche chiamarla usando i nomi degli argomenti, cioè per parola chiave:
print(add_numbers(a=10, b=20, c=30))
# outputs: 60Ma 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 + cOra 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)) # 60Tuttavia, 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 argumentsIl 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.