V Pythonu lahko definirate funkcijo, ki sprejme spremenljivo število argumentov. V tem članku se boste naučili definirati takšne funkcije z uporabo privzetih, ključnih besed in poljubnih argumentov.
Video: Argumenti funkcije Python: položaj, ključne besede in privzeto
Argumenti
V temi o uporabniško določeni funkciji smo se naučili definiranja funkcije in njenega klica. V nasprotnem primeru bo klic funkcije povzročil napako. Tu je primer.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Izhod
Pozdravljena Monica, dobro jutro!
Tu ima funkcija greet()
dva parametra.
Ker smo to funkcijo poklicali z dvema argumentoma, deluje gladko in ne dobimo nobene napake.
Če ga pokličemo z različnim številom argumentov, bo tolmač prikazal sporočilo o napaki. Spodaj je klic te funkcije z enim in brez argumentov skupaj s pripadajočimi sporočili o napakah.
>>> greet ("Monica") # samo en argument TypeError: greet () manjka 1 obvezen pozicijski argument: 'msg'
>>> greet () # brez argumentov TypeError: greet () manjka 2 zahtevana pozicijska argumenta: 'ime' in 'msg'
Argumenti s spremenljivo funkcijo
Doslej so imele funkcije določeno število argumentov. V Pythonu obstajajo drugi načini za določanje funkcije, ki lahko sprejme spremenljivo število argumentov.
Spodaj so opisane tri različne oblike te vrste.
Privzeti argumenti Pythona
Argumenti funkcije imajo lahko privzete vrednosti v Pythonu.
Argumentu lahko damo privzeto vrednost z uporabo operatorja dodelitve (=). Tu je primer.
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?")
Izhod
Pozdravljena Kate, dobro jutro! Pozdravljeni Bruce, kako ste?
V tej funkciji parameter name
nima privzete vrednosti in je obvezen (obvezen) med klicem.
Po drugi strani ima parameter msg
privzeto vrednost "Good morning!"
. Med klicem torej ni obvezna. Če je navedena vrednost, bo prepisala privzeto vrednost.
Vsako število argumentov v funkciji ima lahko privzeto vrednost. Ko pa imamo privzeti argument, morajo imeti vsi argumenti na njegovi desni tudi privzete vrednosti.
To pomeni, da neprivzeti argumenti ne morejo slediti privzetim argumentom. Če bi na primer glavo funkcije definirali zgoraj kot:
def greet (msg = "Dobro jutro!", ime):
Dobili bi napako kot:
SyntaxError: neprivzeti argument sledi privzetemu argumentu
Argumenti ključnih besed Python
Ko prikličemo funkcijo z nekaterimi vrednostmi, se te vrednosti dodelijo argumentom glede na njihov položaj.
Na primer, v zgornji funkciji greet()
, ko smo jo poklicali kot greet("Bruce", "How do you do?")
, se vrednost "Bruce"
dodeli imenu argumenta in podobno "How do you do?"
kot msg.
Python omogoča klicanje funkcij z uporabo argumentov ključnih besed. Ko funkcije pokličemo na ta način, lahko vrstni red (položaj) argumentov spremenimo. Vsi naslednji klici zgornje funkcije so vsi veljavni in imajo enak 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?")
Kot vidimo, lahko pozicijske argumente med klicem funkcije mešamo z argumenti ključnih besed. Upoštevati pa moramo, da morajo argumenti ključnih besed slediti pozicijskim argumentom.
Argument položaja za argumenti ključnih besed bo povzročil napake. Na primer, funkcija pokliče na naslednji način:
greet(name="Bruce","How do you do?")
Rezultat napake:
SyntaxError: argumentacija brez ključnih besed za argumentirano ključno besedo
Samovoljni argumenti Pythona
Včasih ne vemo vnaprej, koliko argumentov bo posredovanih v funkcijo. Python nam omogoča, da tovrstne situacije obvladamo s klici funkcij s poljubnim številom argumentov.
V definiciji funkcije za oznako tovrstnega argumenta pred imenom parametra uporabimo zvezdico (*). Tu je primer.
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")
Izhod
Pozdravljeni Monica Pozdravljeni Luke Pozdravljeni Steve Pozdravljeni John
Tu smo funkcijo poklicali z več argumenti. Ti argumenti se zavijejo v nabor, preden se prenesejo v funkcijo. Znotraj funkcije uporabljamo for
zanko za pridobivanje vseh argumentov nazaj.