Python-funktion argumentit (oletus, avainsana ja mielivaltainen)

Pythonissa voit määrittää funktion, joka vie muuttuvan määrän argumentteja. Tässä artikkelissa opit määrittelemään tällaiset toiminnot oletus-, avainsana- ja mielivaltaisilla argumenteilla.

Video: Python-funktion argumentit: sijainti, avainsanat ja oletus

Väitteet

Käyttäjän määrittelemässä toimintoaiheessa opimme funktion määrittelemisestä ja kutsumisesta. Muussa tapauksessa toimintokutsu johtaa virheeseen. Tässä on esimerkki.

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

Tuotos

 Hei Monica, hyvää huomenta!

Tässä funktiossa greet()on kaksi parametria.

Koska olemme kutsuneet tätä funktiota kahdella argumentilla, se toimii sujuvasti, emmekä saa virheitä.

Jos kutsumme sitä eri argumenttimäärällä, tulkki näyttää virheilmoituksen. Alla on kutsu tälle funktiolle, jossa on yksi ja ei argumentteja sekä niiden virheilmoitukset.

 >>> tervehdys ("Monica") # vain yksi argumentti TypeError: greet () puuttuu 1 vaadittu sijainti-argumentti: 'msg'
 >>> tervehdys () # ei argumenttia TypeError: tervehdys () puuttuu 2 vaadittavaa sijaintiargumenttia: 'nimi' ja 'msg'

Muuttuvien toimintojen argumentit

Tähän asti funktioilla oli kiinteä määrä argumentteja. Pythonissa on muitakin tapoja määrittää funktio, joka voi ottaa muuttuvan määrän argumentteja.

Kolme tämän tyyppistä muotoa kuvataan alla.

Python-oletusargumentit

Funktion argumenteilla voi olla oletusarvot Pythonissa.

Voimme antaa argumentille oletusarvon käyttämällä määritysoperaattoria (=). Tässä on esimerkki.

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

Tuotos

Hei Kate, hyvää huomenta! Hei Bruce, kuinka voit?

Tässä toiminnossa parametrilla nameei ole oletusarvoa, ja se vaaditaan (pakollinen) puhelun aikana.

Toisaalta parametrin msgoletusarvo on "Good morning!". Joten se on valinnainen puhelun aikana. Jos arvo annetaan, se korvaa oletusarvon.

Mikä tahansa funktion argumenttien määrä voi olla oletusarvo. Mutta kun meillä on oletusarvo, kaikilla sen oikealla puolella olevilla argumenteilla on oltava myös oletusarvot.

Tämä tarkoittaa, että ei-oletusargumentit eivät voi seurata oletusargumentteja. Esimerkiksi, jos olisimme määritelleet yllä olevan funktion otsikon seuraavasti:

 def tervehdys (msg = "Hyvää huomenta!", nimi):

Saisimme virheen:

 SyntaxError: muu kuin oletusargumentti seuraa oletusargumenttia

Python-avainsanan perustelut

Kun kutsumme funktiota, jolla on joitain arvoja, nämä arvot osoitetaan argumenteille niiden sijainnin mukaan.

Esimerkiksi yllä olevassa funktiossa greet(), kun kutsumme sitä nimellä greet("Bruce", "How do you do?"), arvo "Bruce"osoitetaan argumentin nimelle ja samalla tavalla "How do you do?"kuin msg.

Python sallii toimintojen kutsumisen avainsana-argumenteilla. Kun kutsumme funktioita tällä tavalla, argumenttien järjestystä (sijaintia) voidaan muuttaa. Kaikki yllä mainitulle toiminnolle soitetut puhelut ovat kelvollisia ja tuottavat saman tuloksen.

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

Kuten näemme, voimme sekoittaa sijaintiargumentteja avainsanaargumentteihin funktion kutsun aikana. Mutta meidän on pidettävä mielessä, että avainsana argumenttien on noudatettava sijaintiargumentteja.

Paikka-argumentin käyttäminen avainsana-argumenttien jälkeen johtaa virheisiin. Esimerkiksi toiminto kutsu seuraavasti:

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

Tuloksena virhe:

 SyntaxError: muu kuin avainsana arg avainsanan arg jälkeen

Pythonin mielivaltaiset argumentit

Joskus emme tiedä etukäteen funktiolle välitettävien argumenttien määrää. Python antaa meille mahdollisuuden käsitellä tällaista tilannetta funktiokutsujen avulla mielivaltaisella määrällä argumentteja.

Funktion määritelmässä käytetään tähtiä (*) parametrin nimen edessä merkitsemään tällaista argumenttia. Tässä on esimerkki.

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

Tuotos

 Hei Monica Hei Luke Hei Steve Hei John

Tässä olemme kutsuneet funktion useilla argumenteilla. Nämä argumentit kääritään dupleksiin ennen niiden siirtämistä funktioon. Funktion sisällä käytämme forsilmukkaa kaikkien argumenttien hakemiseen takaisin.

Mielenkiintoisia artikkeleita...