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.
* 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.
** 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.
Args e kwargs sono utili quando vuoi:
Diamo un'occhiata a come kwargs e arg vengono usati nelle funzioni.
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
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 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)
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)
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.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.