Argomenti Posizionali e Parola Chiave

Quando si programma in Python, è possibile utilizzare argomenti posizionali, argomenti parola chiave o una combinazione di entrambi durante la definizione e la chiamata di funzioni. L'uso di questi argomenti può migliorare la leggibilità e la flessibilità del codice.

Argomenti Posizionali

Gli argomenti posizionali sono quelli che devono essere passati a una funzione nell'ordine corretto. Ecco un esempio in cui costruiamo una semplice funzione per generare un nome completo:
def full_name(first_name, last_name):
    return f'{first_name} {last_name}'  # Combina il nome e il cognome

print(full_name('Anna', 'Brown'))       # Stampa 'Anna Brown'
Nell'esempio sopra, Anna è il primo argomento e Brown è il secondo argomento. Se invertiamo l'ordine degli argomenti, otterremo risultati diversi:
print(full_name('Brown', 'Anna'))       # Stampa 'Brown Anna'

Argomenti Parola Chiave

Al contrario, gli argomenti parola chiave ci permettono di specificare il nome dell'argomento quando lo passiamo alla funzione, migliorando così la leggibilità del nostro codice. Inoltre, possiamo usarli per stabilire valori predefiniti per argomenti opzionali.
def full_name(first_name, last_name):
    return f'{first_name} {last_name}'

print(full_name(last_name='Brown', first_name='Anna'))  # Stampa 'Anna Brown'
print(full_name(first_name='Anna', last_name='Brown'))  # Stampa 'Anna Brown'
Questo produce lo stesso output del primo esempio, indipendentemente dall'ordine degli argomenti.
 
💡
È importante notare che, durante la chiamata di una funzione, gli argomenti parola chiave devono sempre seguire quelli posizionali.
Se si utilizzano argomenti parola chiave prima degli argomenti posizionali in una chiamata di funzione, Python genererà un errore di sintassi. Questa regola aiuta Python a distinguere tra i due tipi di argomenti. Se gli argomenti posizionali seguono quelli parola chiave, l'interprete di Python si confonde perché si aspetta che tutti gli argomenti posizionali siano già stati definiti. Ecco un esempio di una chiamata di funzione errata che genererebbe un SyntaxError:
def greet(first_name, last_name):
    print('Hello', first_name, last_name)

greet(last_name='Doe', 'John')
# SyntaxError: un argomento posizionale segue un argomento parola chiave
Questa regola assicura che le chiamate di funzione siano chiare, rendendo il codice più facile da capire e meno soggetto a errori.

Combinare Argomenti Posizionali e Parola Chiave

Consideriamo questa funzione che formatta un nome completo, incluso un secondo nome:
# Valori predefiniti per il secondo nome e il cognome (stringhe vuote)
def full_name(first, middle='', last=''):
    return first + ' ' + middle + ' ' + last

print(full_name('Anna', last='Brown'))                   # 'Anna  Brown'
print(full_name('Anna', middle='Louise', last='Brown'))  # 'Anna Louise Brown'
print(full_name('Anna', 'Louise', last='Brown'))         # 'Anna Louise Brown'
print(full_name('Anna', 'Louise', 'Brown'))              # 'Anna Louise Brown'
print(full_name(first='Anna', 'Louise', last='Brown'))   # SyntaxError
In questo esempio, il nome è fornito come argomento posizionale, mentre il cognome è un argomento parola chiave. Il secondo nome non è fornito, quindi utilizza il suo valore predefinito (una stringa vuota).
Un'altra regola importante è che, una volta iniziato a utilizzare argomenti parola chiave, tutti gli argomenti successivi dovrebbero essere anch'essi parola chiave. Ad esempio, print(full_name(first='Anna', 'Louise', last='Brown')) genererebbe un errore perché un argomento posizionale (Louise) segue un argomento parola chiave (first='Anna').
Infine, consideriamo un esempio più complesso: una funzione che calcola il costo totale di un acquisto con parametri opzionali per tassa e sconto.
# I valori predefiniti per tassa e sconto sono impostati a 0
def calculate_total_cost(price, tax=0.0, discount=0.0):
    return price + price * tax - discount

print(calculate_total_cost(100, tax=0.05))                # 105.0
print(calculate_total_cost(100, discount=10))             # 90.0
print(calculate_total_cost(100, tax=0.05, discount=10))   # 95.0
In questo caso, il prezzo è un argomento posizionale obbligatorio, mentre tassa e sconto sono argomenti parola chiave opzionali. Se non forniti, assumeranno i loro valori predefiniti di 0.
 
To check your solution you need to sign in
Sign in to continue