Înțelegerea Args și Kwargs în Python

În acest tutorial, mă voi concentra pe argumente (* args) și argumentele cuvintelor cheie (* kwargs) în Python.

Eu vă voi învăța ce args și kwargs sunt și, cel mai important, cum să le folosiți - așa se poate lua un număr nelimitat de argumente și argumente de cuvinte cheie în funcții.

Care sunt argumentele?

* args sunt folosite pentru a trece non-cuvinte cheie argumente. Exemple de cuvinte cheie fără cuvinte cheieargumentele sunt distracție (3,4), distracție ("foo", "bar").

* args sunt de obicei utilizate ca o măsură pentru a împiedica crasarea programului dacă nu știm câte argumente vor fi transmise funcției. Acest lucru este folosit în C ++, precum și în alte limbi de programare.

Ce sunt Kwargs?

** kwargs este un dicționar al argumentelor cuvintelor cheie. ** ne permite să transmitem orice număr de argumente ale cuvintelor cheie. Un argument de cuvinte cheie este în esență un dicționar.

Un exemplu de cuvânt cheieargumentul este fun (foo = 2, bar = 7).

** kwargs sunt ca și cum * args cu excepția cazului în care declarați variabilele și suma din cadrul funcției argumente.

Unde se utilizează Args și Kwargs

Args și kwargs sunt utile atunci când doriți:

  • Reduceți rescrierea codului.
  • Faceți codul dvs. lizibil.
  • Reutilizați codul

Folosind Args și Kwargs în funcții

Să ne uităm la modul în care kwargs și args sunt utilizate în funcții.

args

Funcția de mai jos are trei argumente. Cele trei argumente au fost definite explicit, astfel încât orice mai mult sau mai puțin va cauza o eroare în program.

(a, b, c): tipăriți (a + b + c) adăugați imprimare (2,3,4) 

Să executăm funcția. Funcția va adăuga cele trei numere, dând următoarea ieșire:

Rezultat 9

Dacă ar fi trebuit să trecem patru argumente în funcție în locul celor trei necesare? Vom primi o eroare după cum se arată mai jos.

Acest lucru se datorează faptului că au fost definiți doar trei parametri în funcție, dar am transmis patru argumente pozitive la apelarea funcției.

adăugați (a, b, c): tipăriți (a + b + c) adăugați imprimare (2,3,4,5) 
Tipul de ieșireError: add () ia 3 argumente poziționale, dar 4 au fost date 

În al doilea exemplu de mai jos, * este pentru non-cuvinte cheie argumente și este trecut în funcție. În loc să avem argumente definite, vom înlocui A, b și c cu un singur parametru (* args).

Observați cum se utilizează * args facilitează utilizarea oricăror argumente fără a fi nevoie să vă modificați codul. * args oferiți mai multă flexibilitate codului, deoarece puteți avea cât mai multe argumente pe care le doriți în viitor.

def add (* args): total = 0 pentru arg în args: total + = arg total de imprimare 
Scenariul 1 adăugați la imprimare (1,2,5) Rezultat 8 
Scenariul 2 imprimă adăugați (1, 2, 6, 6) ieșire 14 
Scenariul 3 imprimare adăugați (1,2,5,8) Rezultat 16

Mai multe exemple

Creați o funcție simplă după cum se arată:

def func (* args): # * args înseamnă pentru multe argumente pe care le luați, le va prinde toate pentru arg în args: print arg 

Testați funcția utilizând o combinație de numere întregi și șiruri de caractere:

def func (* args): # * args înseamnă pentru multe argumente pe care le luați, va prinde toate pentru arg în args: print arg print func (11,3,4,5, "tuts") 
Rezultat 11 3 4 5 Tut

Dacă ar fi trebuit să transmitem o listă ca argument? Testați funcția cu o listă, înlocuind argumentele anterioare cu o listă,  l = [11,3,4,5, "tuts].

def func (* args): # * args înseamnă pentru multe argumente pe care le luați, le va prinde toate pentru arg în args: print arg l = [11,3,4,5, "tuts"] print func ) 
Aceasta imprimă lista în ansamblul său, deoarece interpretează lista ca un singur element. Ieșire [11,3,4,5, "tuts]

Din exemplul de mai sus, puteți utiliza, de asemenea * args pentru a dezarhiva argumentele care sunt deja într-o listă sau o tuplă, astfel încât toate elementele din listă să fie transferate ca parametri diferiți.

Folosind aceeași funcție:

def (* args): # * args înseamnă pentru multe argumente pe care le luați, le va prinde pe toate pentru arg în args: print (arg) l = [11,3,4,5, tuts] func (* l)) 
* Va despacheta lista și va scoate fiecare element de listă individual. Rezultat 11 3 4 5 Tut

Kwargs

Kwargs vă permite să transmiteți argumentele cuvintelor cheie unei funcții. Ele sunt utilizate atunci când nu sunteți sigur de numărul de argumente ale cuvintelor cheie care vor fi transmise în funcție.

Scrieți o funcție my_func și treci (x = 10, y = 20) drept cuvânt cheie argumentele prezentate mai jos:

Definiți funcția my_func (x = 10, y = 20): tipăriți x, y
Prin aceasta se tipăresc valorile x și y Ieșire 10,20

Kwargs poate fi folosit pentru despachetarea cheilor de dicționar, perechi de valori. Acest lucru se face folosind notarea dublă asterisc (**). Este important să rețineți că fiecare cheie trebuie să fie potrivită cu o valoare.

Iată un exemplu tipic despre modul în care a fost făcut. Funcția de mai jos face ca țările ca chei și capitalele lor ca valori. Apoi, ea imprimă o declarație care repetă pe kwargs și hărți fiecare cuvânt cheie la valoarea atribuită.

Definiți capital_cities (** kwargs): # inițializați o listă goală pentru a stoca rezultatul rezultat = [] pentru cheie, valoare în kwargs.items (): result.append ("Capitalul  este  .format , valoare) rezultatul returnării

Puteți apela funcția cu orice argumente doriți.

Definiți capital_cities (** kwargs): # inițializați o listă goală pentru a stoca rezultatul rezultat = [] pentru cheie, valoare în kwargs.items (): result.append ("Capitalul  este  .format , valoare) rezultatul returnat print capital_city (China = "Beijing", Cairo = "Egipt", Roma = "Italia"))
ieșire ["Capitala Chinei este Beijing", "Capitala Cairo este Egipt", "Capitala Romei este Italia"] 

Pentru un exemplu mai complex, să presupunem că avem un model pentru un client care arată cam așa:

(maximum_length = 100, null = adevărat) last_name = models.CharField (max_length = 100) username = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) parola = models.CharField (max_length = 100)

Puteți utiliza kwargs pentru a realiza atât intrări de date, cât și interogări de date din obiecte de model. Să scriem o vizualizare de funcții pentru a crea un nou client.

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

Iată cum să efectuați o interogare a clientului pe care tocmai l-am creat folosind kwargs.

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

Folosind ambele Args și Kwargs într-o funcție

Când folosiți ambele args și kwargs în aceeași definiție a funcției, * args trebuie să apară înainte ** kwargs

MyFunction (Foo): def __init __ (auto, * args, ** kwargs): print 'super funcția mea' (MyFunction, self) .__ init __ (* args, ** kwargs)

Exemplu:

def Func (* args, ** kwargs): pentru arg în args: print arg pentru element în kwargs.items (): print item

Tine minte args ar trebui să vină înainte kwargs.

def Func (* args, ** kwargs): pentru arg în args: print arg pentru element în kwargs.items (): imprimare element imprimare Func (1, x = 7, u =
Ieșirea 1 ("x", 7) ("u", 8)

Concluzie

Sper că acest tutorial v-a ajutat să înțelegeți args și kwargs.

Mai jos sunt câteva indicii de reținut când folosiți args și kwargs:

  • * args și ** kwargs sunt sintaxa specială care sunt folosite în funcții pentru a transmite un număr variabil de argumente la o funcție.
  • * args apar înainte ** kwargs într-o definiție a funcției.
  • * args și ** kwargs sunt utilizate cel mai bine în situațiile în care numărul de intrări va rămâne relativ mic.
  • Puteți utiliza orice nume doriți; args și kwargs sunt doar convențional și nu o cerință. De exemplu, puteți utiliza * foo in loc de * args sau ** foo in loc de ** kwargs.

Documentația oficială Python oferă o mulțime de informații pentru continuarea studiului. În plus, nu ezitați să vedeți ce avem la dispoziție pentru vânzare și pentru a studia pe piață și nu ezitați să întrebați orice întrebări și să furnizați feedback-ul valoros utilizând feedul de mai jos.

Cod