I denne opplæringen vil jeg fokusere på argumenter (* args
) og søkeord argumenter (* kwargs
) i Python.
Jeg vil lære deg hva args og kwargs er, og viktigst, hvordan du bruker dem, det vil si hvordan du tar inn et ubegrenset antall argumenter og søkeord argumenter i funksjoner.
* args
er vant til å passere ikke-søkeord argumenter. Eksempler på ikke-søkeordArgumenter er morsom (3,4), morsom ("foo", "bar")
.
* args
brukes vanligvis som et tiltak for å forhindre at programmet krasjer hvis vi ikke vet hvor mange argumenter som skal sendes til funksjonen. Dette brukes i C ++, så vel som andre programmeringsspråk.
** kwargs
er en ordbok for søkeord argumenter. De **
lar oss passere et hvilket som helst antall søkeord argumenter. Et søkeord argument er i utgangspunktet en ordbok.
Et eksempel på et søkeordargumentet er moro (foo = 2, bar = 7)
.
** kwargs
er akkurat som * args
bortsett fra at du erklære variablene og mengden i funksjonen argumenter.
Args og Kwargs er nyttige når du vil:
La oss se på hvordan kvarger og args brukes i funksjoner.
Funksjonen nedenfor tar inn tre argumenter. De tre argumentene er eksplisitt definert, slik at noe mer eller mindre vil føre til en feil i programmet.
def legg til (a, b, c): print (a + b + c) print add (2,3,4)
La oss kjøre funksjonen. Funksjonen vil legge til de tre tallene, og gir følgende utgang:
Utgang 9
Hva om vi skulle passere fire argumenter i funksjonen i stedet for de tre påkrevde? Vi mottar en feil som vist nedenfor.
Dette skyldes at bare tre parametere ble definert i funksjonen, men vi har passert fire posisjonære argumenter når vi ringer til funksjonen.
def legg til (a, b, c): print (a + b + c) print add (2,3,4,5)
Output TypeError: add () tar 3 plasseringsargumenter, men 4 ble gitt
I det andre eksempelet nedenfor, er *
er for ikke-søkeord argumenter og blir sendt inn i funksjonen. I stedet for å ha definert argumenter, erstatter vi en
, b
og c
med en enkelt parameter (* args
).
Legg merke til hvordan bruken av * args
gjør det enkelt å bruke et hvilket som helst antall argumenter uten å måtte endre koden din. * args
gi mer fleksibilitet til koden din siden du kan ha så mange argumenter som du ønsker i fremtiden.
def add (* args): total = 0 for arg i args: totalt + = arg utskrift totalt
Scenario 1 utskriftstilgang (1,2,5) Utgang 8
Scenario 2 print add (1,2,5,6) utgang 14
Scenario 3 print add (1,2,5,8) Utgang 16
Lag en enkel funksjon som vist:
def func (* args): # * args betyr for hvor mange argumenter du tar inn, det vil fange dem alle for arg i args: print arg
Test funksjonen ved hjelp av en kombinasjon av heltall og strenger:
def func (* args): # * args betyr for mange argumenter du tar inn, det vil fange dem alle for arg i args: print arg print func (11,3,4,5, "tuts")
Utgang 11 3 4 5 tuts
Hva om vi skulle sende en liste som et argument? Test funksjonen med en liste ved å erstatte de forrige argumentene med en liste, l = [11,3,4,5, "tuts]
.
def func (* args): # * args betyr for mange argumenter du tar inn, det vil fange dem alle for arg i args: print arg l = [11,3,4,5, "tuts"] print func )
Dette skriver ut listen som helhet, dette skyldes at det tolker listen som ett element. Utgang [11,3,4,5, "tuts]
Fra eksempelet ovenfor kan du også bruke * args
å pakke ut argumenter som allerede er i en liste eller en tuple, slik at alle elementene i listen overføres som forskjellige parametere.
Bruk av samme funksjon:
def func (* args): # * args betyr for mange argumenter du tar inn, det vil fange dem alle for arg i args: print (arg) l = [11,3,4,5, "tuts"] print funk (* l))
Den * pakker ut listen og sender ut hvert enkelt listeelement. Utgang 11 3 4 5 tuts
Kwargs lar deg passere søkeord argumenter til en funksjon. De brukes når du ikke er sikker på antall søkeordargumenter som skal sendes i funksjonen.
Skriv en funksjon my_func
og pass inn (x = 10, y = 20)
som søkeord argumenter som vist nedenfor:
def my_func (x = 10, y = 20): skriv ut x, y
Dette skriver ut verdiene til x og y Output 10,20
Kwargs kan brukes til å pakke ut ordliste nøkkel, verdi par. Dette gjøres ved hjelp av dobbelstjernesnotasjonen (**
). Det er viktig å merke seg at hver nøkkel må matches med en verdi.
Her er et typisk eksempel på hvordan det er gjort. Funksjonen nedenfor tar land som nøkler og hovedstader som verdiene. Den skriver deretter ut en erklæring som gjenspeiles over kvargene og kartlegger hvert søkeord til verdien som er tildelt den.
def capital_cities (** kwargs): # initialiser en tom liste for å lagre resultatresultatet = [] for nøkkel, verdi i kwargs.items (): result.append ("Hovedstaden til er .format , verdi) returresultat
Du kan ringe funksjonen med eventuelle argumenter du vil ha.
def capital_cities (** kwargs): # initialiser en tom liste for å lagre resultatresultatet = [] for nøkkel, verdi i kwargs.items (): result.append ("Hovedstaden til er .format , verdi) returresultat print capital_city (Kina = "Beijing", Kairo = "Egypt", Roma = "Italia"))
utgang ['Hovedstaden i Kina er Beijing', 'Hovedstaden i Kairo er Egypt', 'Romas hovedstad er Italia']
For et mer komplisert eksempel, anta at vi har en modell for en kunde som ser noe ut som dette:
klassen Kunde (models.Model): first_name = models.CharField (max_length = 100, null = True) last_name = models.CharField (max_length = 100) brukernavn = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) passord = models.CharField (max_length = 100)
Du kan bruke kvarger til å gjøre både datainnganger og dataforespørsler fra modellobjekter. La oss skrive en funksjonsvisning for å opprette en ny kunde.
Kwargs = "first_name": "John", "last_name": "Doe", "brukernavn": "johndoe", "email" [email protected] "," passord ":" 1234 " new_user = Bruker * Kwargs) new_user.save ()
Slik gjør du et spørsmål fra kunden vi nettopp har opprettet ved hjelp av kvarger.
filter_customer = 'email': [email protected], 'brukernavn': johndoe, Customer.objects.filter (** filter_customer)
Når du bruker både args og kwargs i samme funksdefinisjon, * args
må skje før ** kwargs
.
klasse MyFunction (Foo): def __init __ (selv, * args, ** kwargs): skriv ut 'min funksjon' super (MyFunction, self) .__ init __ (* args, ** kwargs)
Eksempel:
def Func (* args, ** kwargs): for arg i args: print arg for element i kwargs.items (): print item
Huske args
bør komme før kwargs
.
def Func (* args, ** kwargs): for arg i args: skriv arg arg for element i kwargs.items (): skriv ut elementet utskrift Func (1, x = 7, u = 8)
Utgang 1 ('x', 7) ('u', 8)
Jeg håper denne opplæringen har hjulpet deg med å forstå args og kwargs.
Nedenfor er noen poeng å huske når du bruker args og kvargs:
* args
og ** kwargs
er spesiell syntaks som brukes i funksjoner for å sende et variabelt antall argumenter til en funksjon.* args
forekommer før ** kwargs
i en funksjonsdefinisjon.* args
og ** kwargs
brukes best i situasjoner hvor antall innganger vil forbli relativt små.args
og kwargs
er kun etter konvensjon og ikke et krav. For eksempel kan du bruke * foo
i stedet for * args
eller ** foo
i stedet for ** kwargs
.Den offisielle Python-dokumentasjonen gir mye informasjon for videre studier. I tillegg, ikke nøl med å se hva vi har tilgjengelig for salg og for studier på markedet, og ikke nøl med å stille spørsmål og gi din verdifulle tilbakemelding ved hjelp av feedet under.