Î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.
* 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.
** 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.
Args și kwargs sunt utile atunci când doriți:
Să ne uităm la modul în care kwargs și args sunt utilizate în funcții.
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
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 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)
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)
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.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.