„Python“ galite apibrėžti funkciją, kuriai reikalingas kintamasis argumentų skaičius. Šiame straipsnyje jūs išmoksite apibrėžti tokias funkcijas naudodami numatytuosius, raktinius žodžius ir savavališkus argumentus.
Vaizdo įrašas: „Python“ funkcijos argumentai: padėtis, raktiniai žodžiai ir numatytasis
Argumentai
Vartotojo apibrėžtoje funkcijos temoje sužinojome apie funkcijos apibrėžimą ir jos iškvietimą. Priešingu atveju dėl funkcijos iškvietimo atsiras klaida. Štai pavyzdys.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Rezultatas
Sveika Monika, labas rytas!
Čia funkcija greet()
turi du parametrus.
Kadangi šią funkciją pavadinome dviem argumentais, ji veikia sklandžiai ir klaidos negauname.
Jei tai vadinsime kitu argumentų skaičiumi, vertėjas parodys klaidos pranešimą. Žemiau pateikiamas šios funkcijos iškvietimas su vienu ir be jokių argumentų kartu su atitinkamais klaidų pranešimais.
>>> sveikinimas („Monica“) # tik vienas argumentas TypeError: greet () trūksta 1 būtino pozicinio argumento: 'msg'
>>> greet () # argumentų nėra TypeError: greet () trūksta 2 būtinų pozicinių argumentų: „name“ ir „msg“
Kintamos funkcijos argumentai
Iki šiol funkcijos turėjo fiksuotą argumentų skaičių. „Python“ yra kiti būdai, kaip apibrėžti funkciją, kuri gali užimti kintamą argumentų skaičių.
Toliau aprašomos trys skirtingos tokio tipo formos.
„Python“ numatytieji argumentai
Funkcijos argumentai gali turėti numatytąsias „Python“ reikšmes.
Numatytąją argumento vertę galime pateikti naudodami priskyrimo operatorių (=). Štai pavyzdys.
def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")
Rezultatas
Sveika Kate, labas rytas! Sveikas, Bruce, kaip tau sekasi?
Šioje funkcijoje parametras name
neturi numatytosios vertės ir yra būtinas (privalomas) skambučio metu.
Kita vertus, parametro msg
numatytoji vertė yra "Good morning!"
. Taigi, skambučio metu jis yra neprivalomas. Jei pateikiama reikšmė, ji perrašys numatytąją vertę.
Bet koks funkcijos argumentų skaičius gali turėti numatytąją vertę. Bet kai turime numatytąjį argumentą, visi jo dešinėje esantys argumentai taip pat turi turėti numatytąsias reikšmes.
Tai reiškia, kad argumentai, kurie nėra numatytieji, negali atitikti numatytųjų argumentų. Pavyzdžiui, jei aukščiau nurodėme funkcijos antraštę kaip:
def sveikas (msg = "Labas rytas!", vardas):
Mes gausime klaidą kaip:
„SyntaxError“: ne numatytasis argumentas seka numatytąjį argumentą
„Python“ raktinių žodžių argumentai
Kai iškviečiame funkciją su kai kuriomis reikšmėmis, šios vertės priskiriamos argumentams pagal jų poziciją.
Pavyzdžiui, pirmiau pateiktoje funkcijoje greet()
, kai ją pavadinome kaip greet("Bruce", "How do you do?")
, vertė "Bruce"
priskiriama argumento pavadinimui ir panašiai kaip "How do you do?"
ir msg
„Python“ leidžia iškviesti funkcijas naudojant raktinių žodžių argumentus. Kai tokiu būdu iškviečiame funkcijas, galima pakeisti argumentų eiliškumą (poziciją). Visi iškvietimai į aukščiau nurodytą funkciją yra galiojantys ir duoda tą patį rezultatą.
# 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?")
Kaip matome, funkcijos skambučio metu galime sumaišyti pozicinius argumentus su raktinių žodžių argumentais. Tačiau turime nepamiršti, kad raktinių žodžių argumentai turi atitikti pozicinius argumentus.
Turint pozicinį argumentą po raktinių žodžių argumentų, bus klaidų. Pavyzdžiui, funkcijos iškvietimas yra toks:
greet(name="Bruce","How do you do?")
Bus klaida:
„SyntaxError“: ne raktinis žodis arg po raktinio žodžio arg
„Python“ savavališki argumentai
Kartais iš anksto nežinome argumentų, kurie bus perduodami funkcijai, skaičiaus. „Python“ leidžia mums valdyti tokio pobūdžio situacijas per funkcijų iškvietimus su savavališkai daugybe argumentų.
Funkcijos apibrėžime prieš parametro pavadinimą naudojame žvaigždutę (*), kad pažymėtume tokio tipo argumentus. Štai pavyzdys.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
Rezultatas
Sveiki Monica Sveiki Luke Sveiki Steve Sveiki John
Čia mes iškvietėme funkciją su keliais argumentais. Šie argumentai prieš juos perkeliant į funkciją susisuka į dvigubą. Funkcijos viduje mes naudojame for
kilpą, kad gautume visus argumentus atgal.