Python * args ja ** kwargs (esimerkkien avulla)

Tässä artikkelissa opit Python * argsista ja ** kwargsista, niiden käytöstä ja toiminnoista esimerkkien avulla.

Ohjelmoinnissa määritellään toiminto uudelleenkäytettävän koodin tekemiseksi, joka suorittaa samanlaisen toiminnan. Tämän toiminnon suorittamiseksi kutsumme funktion, jolla on tietty arvo, tätä arvoa kutsutaan funktion argumentiksi Pythonissa.

Suosittelemme, että luet Python-funktion ja Python-funktion argumentit.

Oletetaan, että määritämme funktion 3 numeron lisäämiselle.

Esimerkki 1: Toiminto lisätä 3 numeroa

 def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)

Kun suoritamme yllä olevan ohjelman, tulos on

 summa: 35

Yllä olevassa ohjelmassa meillä on adder()funktio kolmella argumentilla x, y ja z. Kun välitämme kolme arvoa kutsuttaessa adder()toimintoa, saadaan kolmen numeron summa lähtöön.

Katsotaan, mitä tapahtuu, kun välitämme yli 3 argumenttia adder()funktiossa.

 def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)

Kun suoritamme yllä olevan ohjelman, tulos on

 TypeError: summain () vie 3 sijaintiargumenttia, mutta 5 annettiin

Yllä olevassa ohjelmassa välitimme adder()funktiolle 5 argumenttia sen sijaan, että saisimme 3 argumenttia TypeError.

Esittely * args ja ** kwargs Pythonissa

Pythonissa voimme välittää muuttuvan määrän argumentteja funktiolle käyttämällä erityisiä symboleja. On olemassa kaksi erikoismerkkiä:

  1. * args (ei avainsanan perustelut)
  2. ** kwargs (avainsanaväitteet)

Käytämme * args ja ** kwargs argumentteina, kun emme ole varmoja funktioiden välitettävien argumenttien määrästä.

Python * väittää

Kuten yllä olevassa esimerkissä, emme ole varmoja funktiolle välitettävien argumenttien määrästä. Pythonissa on * argumenttia, joiden avulla voimme välittää muuttujan määrän ei-avainsanalauseita toimimaan.

Funktiossa meidän tulisi käyttää tähtiä *parametrin nimen edessä muuttuvan pituuden argumenttien välittämiseksi. Argumentit välitetään dupleksina ja nämä välitetyt argumentit tekevät funktion sisällä kaksinkertaisen saman nimisen kuin tähtiä sisältämätön parametri *.

Esimerkki 2: * args -toiminnon avulla muuttujan pituusargumentit välitetään funktiolle

 def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)

Kun suoritamme yllä olevan ohjelman, tulos on

 Summa: 8 Summa: 22 Summa: 17

Yllä olevassa ohjelmassa käytimme * num parametrina, jonka avulla voimme siirtää muuttuvan pituisen argumenttilistan adder()funktiolle. Funktion sisällä meillä on silmukka, joka lisää välitetyn argumentin ja tulostaa tuloksen. Ohitimme funktion argumentiksi 3 erilaista vaihtelevaa pituutta.

Python ** kwargs

Python välittää muuttujan pituisen ei-avainsanalauseen toimimaan * args -toiminnolla, mutta emme voi käyttää tätä välittämään avainsana-argumenttia. Tätä ongelmaa varten Pythonilla on ratkaisu nimeltä ** kwargs, jonka avulla voimme siirtää muuttujan avainsana-argumenttien pituuden funktiolle.

Funktiossa **käytetään parametrin nimen edessä olevaa kaksinkertaista tähdellä tämän tyyppistä argumenttia. Argumentit välitetään sanakirjana, ja nämä argumentit tekevät sanakirjan sisäisestä funktiosta, jonka nimi on sama kuin parametri, joka ei sisällä kaksinkertaista tähtiä **.

Esimerkki 3: ** kwargs -toiminnon avulla muuttujan avainsanan argumentit välitetään funktiolle

 def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)

Kun suoritamme yllä olevan ohjelman, tulos on

 Argumentin tietotyyppi: Etunimi on Sita Sukunimi on Sharma Ikä on 22 Puhelin on 1234567890 Argumentin tietotyyppi: Etunimi on John Sukunimi on Wood Sähköposti on [email protected] Maa on Wakanda Ikä on 25 Puhelin on 9876543210

Yllä olevassa ohjelmassa meillä on funktio intro(), jonka parametrina on ** data. Ohitimme intro()funktiolle kaksi sanakirjaa, joiden argumentin pituus vaihtelee . Meillä on silmukan sisäinen intro()toiminto, joka toimii läpäistyn sanakirjan tiedoilla ja tulostaa sanakirjan arvon.

Muistettavaa:

  • * args ja * kwargs ovat erityinen avainsana, jonka avulla funktio voi ottaa vaihtelevan pituisen argumentin.
  • * args välittää muuttuvan määrän avainsanattomia argumenttiluetteloita ja minkä luettelon operaation voidaan suorittaa.
  • ** kwargs välittää vaihtelevan määrän avainsanaargumentteja sanakirjasta toimiakseen, millä sanakirjan toiminta voidaan suorittaa.
  • * args ja ** kwargs tekevät toiminnosta joustavan.

Mielenkiintoisia artikkeleita...