Pythoni funktsioon võib aktsepteerida kolme tüüpi argumente: standardne, muutuja (*args) ja märksõna (**kwargs). Standardargumendid on kõige lihtsamad, kuid nende funktsionaalsus on piiratud. Teisest küljest võimaldavad *args ja **kwargs muuta oma funktsioone paindlikumaks, aktsepteerides muutuva arvu sisendeid.
Teie valitud argumentide edastamise tüüp sõltub teie funktsiooni olemusest ja teie enda eelistatud programmeerimisstiilist.
Pythoni põhifunktsioonid
Et mõista, kuidas Pythoni funktsioonide kaks muutujaargumenti töötavad, on oluline mõista, miks need üldse eksisteerivad. Lihtne funktsioon deklareerib fikseeritud arvu anonüümseid argumente, näiteks:
deflisand(a, b, c):
tagasi a + b + c
See funktsioon töötab hästi, kuid seal on veel arenguruumi. Suurim probleem on see, et see käsitleb ainult kahte argumenti, nii et see saab liita ainult kaks numbrit. Mis siis, kui soovite lisada kaks või neli numbrit? See funktsioon ei võimalda teil seda teha. Kui esitate rohkem või vähem argumente, kui funktsioon vastu võtab, tekib tüübivea.
Muidugi võite luua rohkem funktsioone, et aktsepteerida erinevat arvu argumente. Kuid see on ebamugav ja ei sobi üldse hästi. Samuti peate iga kord looma uue funktsiooni, kui soovite käsitleda uut arvu sisestusi.
Siin tulevad sisse muutujaargumendid ja märksõnaargumendid. Kasutades *args ja **kwargs, saate määratleda paindlikke funktsioone, mis võivad võtta muutuva arvu sisendeid.
Mis on *args Pythonis?
Pythoni *argsi põhiidee on võimaldada teil oma funktsioonile edastada muutuv arv sisendeid. See on kasulik erinevates rakendustes. Mõelge näiteks kalkulaatoriprogrammile, kus soovite anda kasutajale võimaluse lisada kaks või enam arvu ja tagastada summa.
Pange tähele, et args on lihtsalt muutuja nimi; see on *, mis on oluline. Saate oma muutuja argumendi jaoks kasutada mis tahes kehtivat nime, kui lisate *.
Kuidas kasutada *args
Funktsiooni addnum saate muuta nii, et see võtaks muutuva arvu sisendeid järgmiselt.
deflisand(*args):
kokku = 0jaoks nr sisse args:
kokku = kokku + arm
tagasi kokku
Ülaltoodud koodilõik kasutab for-silmust tarnitud sisendite kaudu itereerimiseks.
Seejärel saate kutsuda funktsiooni addnum muutuvate argumentidega ja see töötab ilma veata:
printida(lisa(10, 1, 12, 12, 4, 54, 5)) ## tagastab 98
printida(lisa(14, 54, 5)) # tagastab 73
printida(lisa(10, 5)) # tagastab 15
Mis on Pythonis **kwargs?
Kui nii *args kui ka **kwargs võimaldavad meil funktsioonidele edastada muutuva arvu sisendeid, siis viimane on spetsiifiline märksõna argumentidele. Kui te ei tea, on märksõnaargumendid lihtsalt nimega argumentide väljamõeldud nimed.
Veel üks ainulaadne asi **kwargsi juures on see, et Python esindab väärtust sõnaraamatuna.
Kuidas **kwargsi kasutada
Nagu *args, on topelt tärn oluline; parameetri nimena võite kasutada mis tahes sõna. Siin on näide **kwargsi kasutamisest Pythonis:
defnädalane_osavõtt(** tööpäevadel):
osalejaid kokku = 0jaokskohalviibijadsissetööpäevad.väärtused():
kokku_osalejad = osalejad kokku + osalejadtagasi osalejaid kokku
printida(nädalane_osavõtt (esmaspäev = 265, teisipäev = 698, kolmapäev = 365, neljapäev = 463, reede = 234)) # tagastab 2025
printida(nädalane_osavõtt (esmaspäev = 265, reede = 234)) # tagastab 499
printida(nädalane_osavõtt (kolmapäev = 365, neljapäev = 463, reede = 234)) # tagastab 1062
Ülaltoodud koodilõik kasutab samuti for-tsüklit, kuid seekord Pythoni sisseehitatud väärtuste () meetodiga. See meetod tagastab sõnastiku kõigi väärtuste vaateobjekti. Meetod Values() võimaldab teil seda teha Pythoni sõnastikust läbi vaadata ilma vaevata.
Kasutage Pythoni funktsioonide paindlikuks muutmiseks muutuvaid argumente
Funktsiooni argumendid on käepärased, kuid mõnele funktsioonile võib kasu tulla muutuva arvu argumentide aktsepteerimisest. Nimega märksõnaargumendid võivad muuta teie koodi loetavamaks ja hõlpsamini kasutatavaks. Peaksite omaks võtma Pythoni *args ja **kwargs argumendid. Neid on üsna lihtne kasutada ning nendega saate muuta oma funktsioonid ja programmid paindlikumaks.
Järgides ülaltoodud samme ja koodilõike, loodame, et saate nüüd oma funktsioonide jaoks kasutada muutuvaid märksõna- ja mitte-märksõna argumente.