Capire Arg e Kwarg in Python

In questo tutorial, mi concentrerò sugli argomenti (* args) e argomenti delle parole chiave (* kwargs) in Python.

Ti insegnerò cosa sono gli argomenti e i kwarg e, soprattutto, come usarli, cioè come includere un numero illimitato di argomenti e argomenti di parole chiave nelle funzioni.

Cosa sono Args?

* args sono abituati a passare non-parola chiave argomenti. Esempi di non parole chiavegli argomenti sono fun (3,4), fun ("foo", "bar").

* args sono solitamente usati come una misura per prevenire il crash del programma se non sappiamo quanti argomenti saranno passati alla funzione. Questo è usato in C ++ così come in altri linguaggi di programmazione.

Cosa sono i Kwarg?

** kwargs è un dizionario di argomenti per parole chiave. Il ** ci consente di passare qualsiasi numero di argomenti di parole chiave. Un argomento di parole chiave è fondamentalmente un dizionario.

Un esempio di una parola chiaveargomento è divertimento (foo = 2, bar = 7).

** kwargs sono proprio come * args tranne che tu dichiari le variabili e la quantità all'interno della funzione argomenti.

Dove usare Arg e Kwarg

Args e kwargs sono utili quando vuoi:

  • Riduci la riscrittura del codice.
  • Rendi leggibile il tuo codice.
  • Riutilizzare il codice

Utilizzo di argomenti e Kwarg in Funzioni

Diamo un'occhiata a come kwargs e arg vengono usati nelle funzioni.

args

La funzione seguente accetta tre argomenti. I tre argomenti sono stati definiti in modo esplicito, quindi più o meno causerà un errore nel programma.

def add (a, b, c): stampa (a + b + c) stampa add (2,3,4) 

Eseguiamo la funzione. La funzione aggiungerà i tre numeri, dando il seguente risultato:

Uscita 9

E se dovessimo passare quattro argomenti nella funzione invece dei tre richiesti? Riceveremo un errore come mostrato di seguito.

Questo perché nella funzione sono stati definiti solo tre parametri, ma al momento di chiamare la funzione abbiamo passato quattro argomenti posizionali.

def add (a, b, c): stampa (a + b + c) stampa add (2,3,4,5) 
Output TypeError: add () accetta 3 argomenti posizionali ma ne sono stati assegnati 4 

Nel secondo esempio qui sotto, il * è per non-parola chiave argomenti e viene passato nella funzione. Invece di avere argomenti definiti, sostituiremo un, B e c con un singolo parametro (* args).

Nota come l'uso di * args semplifica l'utilizzo di qualsiasi numero di argomenti senza dover modificare il codice. * args fornire maggiore flessibilità al codice in quanto è possibile avere tutti gli argomenti che si desidera in futuro.

def add (* args): total = 0 per arg in args: total + = arg print total 
Scenario 1 print add (1,2,5) Output 8 
Scenario 2 print add (1,2,5,6) output 14 
Stampa di scenario 3 aggiunta (1,2,5,8) Uscita 16

Altri esempi

Crea una semplice funzione come mostrato:

def func (* args): # * args significa che per molti argomenti che si prendono, li prenderà tutti per arg in args: print arg 

Prova la funzione usando una combinazione di numeri interi e stringhe:

def func (* args): # * args significa che per tutti gli argomenti che si prendono, li prenderà tutti per arg in args: print arg print func (11,3,4,5, "tuts") 
Uscita 11 3 4 5 tuts

Cosa succede se dovessimo passare una lista come argomento? Prova la funzione con un elenco sostituendo gli argomenti precedenti con un elenco,  l = [11,3,4,5, "tuts].

def func (* args): # * args significa che per molti argomenti che si prendono, li prenderà tutti per arg in args: print arg l = [11,3,4,5, "tuts"] print func (l ) 
Questo stampa l'elenco nel suo complesso, Questo perché interpreta l'elenco come un elemento. Output [11,3,4,5, "tut]

Dall'esempio precedente, puoi anche usare * args per decomprimere gli argomenti già presenti in una lista o in una tupla in modo che tutti gli elementi nell'elenco vengano passati come parametri diversi.

Utilizzando la stessa funzione:

def func (* args): # * args significa per molti argomenti che si prendono, li prenderà tutti per arg in: print (arg) l = [11,3,4,5, "tuts"] print ( func (* l)) 
* Decomprimerà l'elenco e produrrà ogni singola voce dell'elenco. Uscita 11 3 4 5 tuts

kwargs

Kwargs ti permette di passare argomenti di parole chiave a una funzione. Vengono utilizzati quando non si è sicuri del numero di argomenti della parola chiave che verranno passati nella funzione.

Scrivi una funzione my_func e passare (x = 10, y = 20) come parola chiave argomenti come mostrato di seguito:

def my_func (x = 10, y = 20): stampa x, y
Questo stampa i valori di x e y Output 10,20

Kwargs può essere utilizzato per decomprimere la chiave del dizionario, coppie di valori. Questo viene fatto usando la doppia notazione asterisco (**). È importante notare che a ciascuna chiave deve corrispondere un valore.

Ecco un tipico esempio di come è fatto. La funzione seguente considera i paesi come chiavi e le loro capitali come valori. Quindi stampa una dichiarazione che itera su kwargs e mappa ogni parola chiave sul valore ad essa assegnato.

def capital_cities (** kwargs): # inizializza una lista vuota per memorizzare il risultato risultato = [] per la chiave, valore in kwargs.items (): result.append ("La città capitale di  è  .format (chiave , valore) restituisce il risultato

Puoi chiamare la funzione con qualsiasi argomento tu voglia.

def capital_cities (** kwargs): # inizializza una lista vuota per memorizzare il risultato risultato = [] per la chiave, valore in kwargs.items (): result.append ("La città capitale di  è  .format (chiave , valore) return result print capital_city (Cina = "Pechino", Cairo = "Egitto", Roma = "Italia"))
produzione ['La capitale della Cina è Pechino', 'La capitale del Cairo è l'Egitto', 'La capitale di Roma è l'Italia'] 

Per un esempio più complesso, supponiamo di avere un modello per un cliente simile a questo:

class Customer (models.Model): first_name = models.CharField (max_length = 100, null = True) last_name = models.CharField (max_length = 100) username = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) password = models.CharField (max_length = 100)

È possibile utilizzare kwargs per eseguire sia gli input di dati che le query di dati dagli oggetti del modello. Scriviamo una vista funzione per creare un nuovo cliente.

kwargs = "first_name": "John", "last_name": "Doe", "username": "johndoe", "email" [email protected] "," password ":" 1234 " new_user = Utente (* * kwargs) new_user.save ()

Ecco come eseguire una query del cliente che abbiamo appena creato utilizzando kwargs.

filter_customer = 'email': [email protected], 'username': johndoe, Customer.objects.filter (** filter_customer)

Utilizzo di Args e Kwarg in una funzione

Quando si usano sia args che kwargs nella stessa definizione di funzione, * args deve verificarsi prima ** kwargs

classe MyFunction (Foo): def __init __ (self, * args, ** kwargs): stampa 'my function' super (MyFunction, self) .__ init __ (* args, ** kwargs)

Esempio:

def Func (* args, ** kwargs): per arg in args: print arg per item in kwargs.items (): print item

Ricorda args dovrebbe venire prima kwargs.

def Func (* args, ** kwargs): per arg in args: print arg per item in kwargs.items (): print item print Func (1, x = 7, u = 8)
Uscita 1 ('x', 7) ('u', 8)

Conclusione

Spero che questo tutorial ti abbia aiutato a capire args e kwargs.

Di seguito sono riportati alcuni suggerimenti da ricordare quando si utilizzano args e kwargs:

  • * args e ** kwargs sono sintassi speciali utilizzate nelle funzioni per passare un numero variabile di argomenti a una funzione.
  • * args si verificano prima ** kwargs in una definizione di funzione.
  • * args e ** kwargs sono utilizzati al meglio in situazioni in cui il numero di ingressi rimarrà relativamente piccolo.
  • Puoi usare qualsiasi nome tu voglia; args e kwargs sono solo per convenzione e non un requisito. Ad esempio, puoi usare * foo invece di * args o ** foo invece di ** kwargs.

La documentazione ufficiale di Python offre molte informazioni per ulteriori approfondimenti. Inoltre, non esitare a vedere ciò che abbiamo a disposizione per la vendita e per studiare nel mercato, e non esitare a fare domande e fornire il tuo prezioso feedback utilizzando il feed qui sotto.