U Pythonu možete definirati funkciju koja uzima promjenjivi broj argumenata. U ovom ćete članku naučiti definirati takve funkcije pomoću zadanih, ključnih riječi i proizvoljnih argumenata.
Video: Argumenti funkcije Python: položajni, ključne riječi i zadani
Argumenti
U temi korisnički definirane funkcije naučili smo o definiranju funkcije i pozivu. U suprotnom, poziv funkcije rezultirat će pogreškom. Evo primjera.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Izlaz
Pozdrav Monica, dobro jutro!
Ovdje funkcija greet()
ima dva parametra.
Budući da smo ovu funkciju pozvali s dva argumenta, ona radi glatko i ne dobivamo nikakvu pogrešku.
Ako ga pozovemo s različitim brojem argumenata, tumač će prikazati poruku o pogrešci. Ispod je poziv na ovu funkciju s jednim i bez argumenata zajedno s njihovim odgovarajućim porukama pogreške.
>>> greet ("Monica") # samo jedan argument TypeError: greet () nedostaje 1 potreban pozicijski argument: 'msg'
>>> greet () # nema argumenata TypeError: greet () nedostaju 2 potrebna pozicijska argumenta: 'ime' i 'msg'
Argumenti promjenjive funkcije
Do sada su funkcije imale fiksni broj argumenata. U Pythonu postoje drugi načini za definiranje funkcije koja može uzimati promjenjivi broj argumenata.
Tri različita oblika ove vrste opisana su u nastavku.
Zadani argumenti Pythona
Argumenti funkcije mogu imati zadane vrijednosti u Pythonu.
Argumentu možemo zadati zadanu vrijednost pomoću operatora dodjele (=). Evo primjera.
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?")
Izlaz
Pozdrav Kate, dobro jutro! Pozdrav Bruce, kako ste?
U ovoj funkciji parametar name
nema zadanu vrijednost i potreban je (obvezan) tijekom poziva.
S druge strane, parametar msg
ima zadanu vrijednost "Good morning!"
. Dakle, nije obavezno tijekom poziva. Ako je navedena vrijednost, ona će prebrisati zadanu vrijednost.
Bilo koji broj argumenata u funkciji može imati zadanu vrijednost. Ali kad imamo zadani argument, svi argumenti s njegove desne strane moraju imati i zadane vrijednosti.
To znači reći, nesuđeni argumenti ne mogu slijediti zadane argumente. Na primjer, ako smo prethodno definirali zaglavlje funkcije kao:
def greet (msg = "Dobro jutro!", ime):
Dobili bismo pogrešku kao:
SyntaxError: ne-zadani argument slijedi zadani argument
Argumenti ključnih riječi Pythona
Kada pozivamo funkciju s nekim vrijednostima, te se vrijednosti dodjeljuju argumentima prema njihovom položaju.
Na primjer, u gornjoj funkciji greet()
, kada smo je pozvali kao greet("Bruce", "How do you do?")
, vrijednost "Bruce"
se dodjeljuje imenu argumenta i slično "How do you do?"
msg.
Python omogućuje pozivanje funkcija pomoću argumenata ključnih riječi. Kada funkcije pozivamo na ovaj način, redoslijed (položaj) argumenata može se promijeniti. Svi sljedeći pozivi gornjoj funkciji su svi valjani i daju isti 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?")
Kao što vidimo, pozicijske argumente možemo miješati s argumentima ključnih riječi tijekom poziva funkcije. Ali moramo imati na umu da argumenti ključnih riječi moraju slijediti položajne argumente.
Imati pozicijski argument nakon argumenata ključne riječi rezultirat će pogreškama. Na primjer, poziv funkcije slijedi:
greet(name="Bruce","How do you do?")
Dovest će do pogreške:
SyntaxError: argument koji nije ključna riječ iza argumenta ključne riječi
Python proizvoljni argumenti
Ponekad ne znamo unaprijed broj argumenata koji će se proslijediti u funkciju. Python nam omogućuje da ovu situaciju riješimo pozivima funkcija s proizvoljnim brojem argumenata.
U definiciji funkcije koristimo zvjezdicu (*) prije naziva parametra da označimo ovu vrstu argumenta. Evo primjera.
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")
Izlaz
Pozdrav Monica Pozdrav Luke Pozdrav Steve Pozdrav John
Ovdje smo pozvali funkciju s više argumenata. Ti se argumenti zamotavaju u skup prije nego što se proslijede u funkciju. Unutar funkcije koristimo for
petlju za povrat svih argumenata natrag.