Come utilizzare *args e **kwargs nelle funzioni Python
Padroneggia *args e **kwargs in Python. Scopri come scrivere funzioni flessibili con argomenti posizionali e parole chiave dinamici, decomprimere raccolte e creare funzioni wrapper.
Panoramica
In Python, avrai spesso bisogno di progettare funzioni che possano accettare un numero variabile di argomenti. Ad esempio, una funzione che calcola la somma di un numero qualsiasi di numeri interi o una funzione che registra metadati con campi variabili. Invece di forzare gli utenti a passare un elenco o un dizionario, Python fornisce due simboli speciali: `*args` e `**kwargs`.
La sintassi `*args` consente a una funzione di accettare un numero qualsiasi di argomenti posizionali. Il singolo asterisco `*` funge da operatore di decompressione. Quando inserito in una definizione di funzione, raccoglie argomenti posizionali aggiuntivi in una tupla denominata "args". Ciò ti consente di scorrere i valori di input, eseguire calcoli o passarli facilmente a un'altra funzione.
La sintassi `**kwargs`, d'altra parte, consente a una funzione di accettare un numero qualsiasi di argomenti con parole chiave (denominate). Il doppio asterisco `**` raccoglie questi argomenti in un dizionario chiamato `kwargs`. Ciò è incredibilmente utile per passare configurazioni opzionali, argomenti di stile o attributi di database. Ricorda, i nomi "args" e "kwargs" sono convenzioni; la funzionalità effettiva è guidata dagli asterischi singoli e doppi.
Codice e output di esecuzione
Questo codice dimostra l'utilizzo di *args per sommare i numeri variabili, **kwargs per stampare i profili utente e la combinazione di entrambi in un'unica funzione.
def sum_all(*args):
print("args type:", type(args).__name__)
return sum(args)
print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))
def print_profile(**kwargs):
print("kwargs type:", type(kwargs).__name__)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_profile(name="Bob", role="developer", country="US")
def master_function(first, *args, **kwargs):
print(f"First argument: {first}")
print(f"Additional positional args: {args}")
print(f"Keyword args: {kwargs}")
master_function("hello", 1, 2, 3, debug=True, user_id=42)args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}Implementazione passo dopo passo
- Utilizza un singolo asterisco prima di un parametro (ad esempio, *args) per raccogliere argomenti posizionali in una tupla.
- Utilizza un doppio asterisco prima di un parametro (ad esempio, **kwargs) per raccogliere argomenti di parole chiave in un dizionario.
- Mantieni l'ordine corretto dei parametri: parametri standard, *args, parametri solo parole chiave, quindi **kwargs.
- Utilizzare la sintassi di decompressione quando si chiamano funzioni passando *iterable o **dictionary.
Domande frequenti
Devo usare i nomi "args" e "kwargs"?
No, queste sono convenzioni comunitarie standard. Solo i prefissi * e ** sono sintatticamente richiesti. Potresti scrivere *values e **options, ma attenersi a *args e **kwargs è altamente raccomandato per la leggibilità.
Qual è l'ordine corretto quando si definisce una funzione?
L'ordine corretto degli argomenti in una firma di funzione è: argomenti posizionali, *args, argomenti basati solo su parole chiave e infine **kwargs.
Argomenti correlati
Scopri come creare una classe in Python. Padroneggia il costruttore __init__, i metodi di istanza, la parola chiave self e l'istanziazione degli oggetti.
Come utilizzare le funzioni Lambda in PythonScopri come utilizzare le funzioni lambda in Python. Padroneggia funzioni anonime, callback in linea e dati di elenchi di ordinamento con chiavi lambda.
Risorse Python consigliate
Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.
Cicli Python
Scopri come utilizzare i loop Python per eseguire iterazioni sui dati. Padroneggia le best practice sui cicli for, while, interruzione, continua e loop con esempi interattivi.
Foglio informativo sui metodi delle stringhe Python
Una guida di riferimento completa per la manipolazione delle stringhe Python. Padroneggia la formattazione, la ricerca, la divisione, la sostituzione e il controllo delle proprietà delle stringhe.
Python vs JavaScript: quale linguaggio di programmazione è il migliore?
Un confronto completo tra Python e JavaScript. Esplora le differenze di sintassi, le prestazioni, i casi d'uso (backend e frontend) ed esempi di codifica.