Pythoni funktsiooni argumendid (vaikimisi, märksõna ja meelevaldsed)

Pythonis saate määratleda funktsiooni, mis võtab muutuva arvu argumente. Selles artiklis õpitakse selliseid funktsioone määratlema vaike-, märksõna- ja suvaliste argumentide abil.

Video: Pythoni funktsiooni argumendid: positsiooniline, märksõnad ja vaikimisi

Argumendid

Kasutaja määratud funktsiooni teemas õppisime funktsiooni määratlemist ja sellele helistamist. Vastasel juhul toob funktsioonikõne kaasa tõrke. Siin on näide.

 def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")

Väljund

 Tere, Monica, tere hommikust!

Siin on funktsioonil greet()kaks parameetrit.

Kuna oleme seda funktsiooni kutsunud kahe argumendiga, töötab see tõrgeteta ja me ei saa ühtegi viga.

Kui nimetame seda erineva arvu argumentidega, kuvab tõlk tõrketeate. Allpool on selle funktsiooni väljakutse koos ühe ja ühe argumendita koos vastavate tõrketeadetega.

 >>> tervitus ("Monica") # ainult üks argument TypeError: greet () puudub 1 nõutav positsiooniline argument: 'msg'
 >>> greet () # argumenti pole TypeError: greet () puudub 2 vajalikku positsioonilist argumenti: 'nimi' ja 'msg'

Muutuva funktsiooni argumendid

Siiani oli funktsioonidel kindel arv argumente. Pythonis on funktsiooni määratlemiseks muid viise, mis võivad võtta muutuva arvu argumente.

Seda tüüpi kolme erinevat vormi on kirjeldatud allpool.

Pythoni vaikeargumendid

Funktsiooni argumentidel võivad Pythonis olla vaikeväärtused.

Võime anda argumendile vaikeväärtuse, kasutades määranguoperaatorit (=). Siin on näide.

 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?")

Väljund

Tere, Kate, tere hommikust! Tere Bruce, kuidas sul läheb?

Selles funktsioonis pole parameetril namevaikeväärtust ja see on kõne ajal kohustuslik (kohustuslik).

Teiselt poolt on parameetri msgvaikeväärtus "Good morning!". Niisiis, see on kõne ajal valikuline. Kui väärtus on esitatud, kirjutab see vaikeväärtuse üle.

Funktsiooni mis tahes arvul argumentidel võib olla vaikeväärtus. Kuid kui meil on vaikimisi argument, peavad kõigil parempoolsetel argumentidel olema ka vaikeväärtused.

See tähendab, et vaikevälised argumendid ei saa järgida vaikeargumente. Näiteks kui me oleksime ülaltoodud funktsiooni päise määratlenud järgmiselt:

 def tervitus (msg = "Tere hommikust!", nimi):

Saame vea järgmiselt:

 SyntaxError: non-default argument järgneb vaikeargumendile

Pythoni märksõna argumendid

Kui kutsume mõne väärtusega funktsiooni, määratakse need väärtused argumentidele vastavalt nende positsioonile.

Näiteks ülaltoodud funktsioonis greet(), kui me seda kutsusime greet("Bruce", "How do you do?"), määratakse väärtus "Bruce"argumendi nimele ja sarnaselt "How do you do?"msg-le.

Python võimaldab funktsioone kutsuda märksõnaargumentide abil. Sel viisil funktsioone kutsudes saab argumentide järjekorda (positsiooni) muuta. Kõik ülaltoodud funktsioonile tehtud kõned on kehtivad ja annavad sama tulemuse.

 # 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?") 

Nagu näeme, võime funktsioonikõne ajal segada positsioonilisi argumente märksõna argumentidega. Kuid me peame meeles pidama, et märksõna argumendid peavad järgima positsiooni argumente.

Kui pärast märksõnaargumente on positsiooniline argument, on tulemuseks vigu. Näiteks funktsiooni kõne järgmiselt:

 greet(name="Bruce","How do you do?")

Tulemuseks on viga:

 SyntaxError: muu märksõna arg pärast märksõna arg

Pythoni meelevaldsed argumendid

Mõnikord ei tea me eelnevalt funktsiooni edastatavate argumentide arvu. Python võimaldab meil sellist olukorda lahendada suvalise arvu argumentidega funktsioonikutsete kaudu.

Funktsiooni määratluses kasutame parameetri nime ees tärn (*), et tähistada sellist argumenti. Siin on näide.

 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")

Väljund

 Tere Monica Tere Luke Tere Steve Tere John

Siin oleme funktsiooni kutsunud mitme argumendiga. Need argumendid pakitakse enne funktsiooni edastamist kaheks. Funktsiooni sees kasutame forkõigi argumentide tagasi saamiseks tsüklit.

Huvitavad Artiklid...