CodeGym /Corsi /Python SELF IT /Lavoro avanzato con i parametri delle funzioni

Lavoro avanzato con i parametri delle funzioni

Python SELF IT
Livello 14 , Lezione 3
Disponibile

7.1 Ottenere tutti gli argomenti della funzione

In Python ci sono diversi modi molto comodi per ottenere dall'interno della funzione la lista di tutti i parametri passati. Diamo uno sguardo a questi metodi.

Utilizzo di *args

*args permette di passare un numero variabile di argomenti posizionali (normali) alla funzione. Questi argomenti sono impacchettati in una tupla e possono essere gestiti all'interno della funzione.


def print_numbers(*args):
    for arg in args:
        print(arg)
        
print_numbers(1, 2, 3, 4, 5)

Spiegazione

La funzione print_numbers accetta un numero arbitrario di argomenti posizionali, impacchettati in una tupla args. Possiamo iterare gli argomenti nella funzione con un ciclo for.

Vantaggi

  • Flessibilità: Permette di passare qualsiasi numero di argomenti alla funzione.
  • Versatilità: Può essere utilizzato per funzioni con un numero indefinito di parametri.

Utilizzo di **kwargs

**kwargs permette di passare un numero variabile di argomenti nominati alla funzione. Questi argomenti sono impacchettati in un dizionario e possono essere gestiti all'interno della funzione.


def print_person_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
        
print_person_info(name="Alice", age=30, city="New York")

Spiegazione

La funzione print_person_info accetta un numero arbitrario di argomenti nominati, impacchettati in un dizionario kwargs. Possiamo iterare gli argomenti nella funzione con il metodo items() del dizionario.

Vantaggi

  • Flessibilità: Permette di passare qualsiasi numero di argomenti nominati alla funzione.
  • Leggibilità: Gli argomenti nominati rendono le chiamate alle funzioni più leggibili.

7.2 Fissare il tipo di argomenti

Solo argomenti posizionali

In Python 3.8 e superiori, puoi definire funzioni con argomenti posizionali, che possono essere passati solo per posizione. Questo si fa con il simbolo / nella definizione della funzione.


def greet(name, /, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet("Alice")  # Output: Hello, Alice!
greet("Alice", greeting="Hi")  # Output: Hi, Alice!
# greet(name="Alice")  # Errore: TypeError

Spiegazione

La funzione greet accetta l'argomento name, che può essere passato solo per posizione. Argomenti prima di / possono essere passati solo per posizione.

Questo approccio consente di limitare il modo in cui gli argomenti sono passati, migliorando la leggibilità e prevenendo errori.

Solo argomenti nominati (Keyword-Only Arguments)

È anche possibile definire parametri di funzione che possono essere passati solo per nome. Questo si fa con il simbolo * nella definizione della funzione.


def greet(*, name, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet(name="Alice")  # Output: Hello, Alice!
greet(name="Alice", greeting="Hi")  # Output: Hi, Alice!
# greet("Alice")  # Errore: TypeError

La funzione greet accetta l'argomento name, che può essere passato solo per nome. Argomenti dopo * possono essere passati solo per nome.

Questo approccio costringe a specificare esplicitamente i nomi degli argomenti, migliorando la leggibilità del codice.

Combinazione di argomenti posizionali e nominati

È anche possibile combinare argomenti posizionali e nominati per ottenere la massima flessibilità.


def greet(name, /, *, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet("Alice")  # Output: Hello, Alice!
greet("Alice", greeting="Hi")  # Output: Hi, Alice!
# greet(name="Alice")  # Errore: TypeError

La funzione greet accetta l'argomento name, che può essere passato solo per posizione, e l'argomento nominato greeting, che deve necessariamente essere passato per nome. L'uso di / e * consente di combinare argomenti posizionali e nominati.

Esempio completo di tutte e tre le situazioni:


def full_example(a, b, /, c, d, *, e, f):
    print(f"a={a}, b={b}, c={c}, d={d}, e={e}, f={f}")
        
# Chiamata della funzione con diversi argomenti
full_example(1, 2, 3, 4, e=5, f=6)  # Tutti gli argomenti sono passati correttamente
# full_example(a=1, b=2, c=3, d=4, e=5, f=6)  # Errore: TypeError

Spiegazione

  • Solo argomenti posizionali: a e b devono essere passati solo per posizione.
  • Argomenti posizionali o nominati normali: c e d possono essere passati sia per posizione che per nome.
  • Solo argomenti nominati: e e f devono essere passati solo per nome.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION