A Pythonban meghatározhat egy függvényt, amely változó számú argumentumot vesz fel. Ebben a cikkben megtanulja meghatározni az ilyen függvényeket alapértelmezett, kulcsszó és tetszőleges argumentumokkal.
Videó: Python Function Arguments: Pozíció, Kulcsszavak és Alapértelmezés
Érvek
A felhasználó által definiált függvénytémában megismerkedtünk egy függvény definiálásával és meghívásával. Ellenkező esetben a függvényhívás hibát eredményez. Itt egy példa.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Kimenet
Hello Monica, jó reggelt!
Itt a függvénynek greet()
két paramétere van.
Mivel ezt a függvényt két argumentummal hívtuk meg, simán fut, és nem kapunk hibát.
Ha más számú argumentummal hívjuk meg, akkor a tolmács hibaüzenetet jelenít meg. Az alábbiakban meghívjuk ezt a függvényt, egy és nem argumentummal együtt a megfelelő hibaüzenetekkel.
>>> üdvözlet ("Monica") # csak egy argumentum TypeError: greet () hiányzik 1 kötelező pozíció argumentum: 'msg'
>>> greet () # no argumentumok TypeError: greet () hiányzik 2 kötelező pozíció argumentum: 'name' és 'msg'
Változó funkciójú érvek
Eddig a függvényeknek fix számú argumentuma volt. A Pythonban más módon lehet meghatározni egy függvényt, amely változó számú argumentumot vehet fel.
Az alábbiakban három ilyen típusú formát írunk le.
Python alapértelmezett érvek
A függvény argumentumoknak lehetnek alapértelmezett értékei a Pythonban.
Alapértelmezett értéket adhatunk egy argumentumhoz a hozzárendelési operátor (=) használatával. Itt egy példa.
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?")
Kimenet
Hello Kate, jó reggelt! Helló, Bruce, hogy csinálod?
Ebben a funkcióban a paraméternek name
nincs alapértelmezett értéke, és hívás közben kötelező (kötelező).
Másrészt, a paraméter msg
alapértelmezett értéke az "Good morning!"
. Tehát hívás közben opcionális. Ha megad egy értéket, akkor az felülírja az alapértelmezett értéket.
A függvényben tetszőleges számú argumentumnak lehet alapértelmezett értéke. De ha van egy alapértelmezett argumentumunk, akkor a tőle jobbra eső összes argumentumnak rendelkeznie kell alapértelmezett értékekkel is.
Ez azt jelenti, hogy a nem alapértelmezett argumentumok nem követhetik az alapértelmezett argumentumokat. Például, ha a fenti funkciófejlécet a következőképpen definiáltuk:
def üdvözlet (msg = "Jó reggelt!", név):
Hibát kapunk:
SyntaxError: a nem alapértelmezett argumentum az alapértelmezett argumentumot követi
Python Kulcsszó érvek
Amikor meghívunk egy függvényt bizonyos értékekkel, ezeket az értékeket a pozíciójuknak megfelelően rendeljük hozzá az argumentumokhoz.
Például a fenti függvényben greet()
, amikor úgy hívtuk greet("Bruce", "How do you do?")
, az értéket "Bruce"
az argumentum nevéhez rendeljük, és hasonlóan "How do you do?"
az msg-hez.
A Python lehetővé teszi a függvények meghívását kulcsszó argumentumokkal. Ha így hívjuk meg a függvényeket, az argumentumok sorrendje (helyzete) megváltoztatható. A fenti függvény hívásai érvényesek és ugyanazt az eredményt hozzák.
# 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?")
Mint láthatjuk, a függvényhívás során keverhetjük a helyzeti argumentumokat a kulcsszó argumentumokkal. De nem szabad megfeledkeznünk arról, hogy a kulcsszó argumentumoknak a helyzeti érveket kell követniük.
Ha kulcsszó argumentumok után van egy pozíciós argumentum, hibákhoz vezet. Például a függvényhívás az alábbiak szerint:
greet(name="Bruce","How do you do?")
Hiba lesz:
SyntaxError: nem kulcsszó arg az arg kulcsszó után
Python önkényes érvek
Előfordul, hogy nem tudjuk előre a függvénybe továbbítandó argumentumok számát. A Python lehetővé teszi számunkra, hogy ezt a fajta helyzetet függvényhívásokon keresztül tetszőleges számú argumentummal kezeljük.
A függvénydefinícióban egy csillagot (*) használunk a paraméter neve előtt az ilyen típusú argumentum jelölésére. Itt egy példa.
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")
Kimenet
Helló Monica Helló Luke Helló Steve Helló John
Itt több argumentummal hívtuk meg a függvényt. Ezeket az argumentumokat egy kettőbe csomagolják, mielőtt átadnák őket a függvénynek. A függvényen belül egy for
hurkot használunk az összes argumentum visszakereséséhez.