I Python kan du definere en funktion, der tager variabelt antal argumenter. I denne artikel lærer du at definere sådanne funktioner ved hjælp af standard-, søgeords- og vilkårlige argumenter.
Video: Python-funktionsargumenter: Position, søgeord og standard
Argumenter
I det brugerdefinerede funktionsemne lærte vi om at definere en funktion og kalde den. Ellers vil funktionsopkaldet resultere i en fejl. Her er et eksempel.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Produktion
Hej Monica, Godmorgen!
Her har funktionen greet()
to parametre.
Da vi har kaldt denne funktion med to argumenter, kører den problemfrit, og vi får ingen fejl.
Hvis vi kalder det med et andet antal argumenter, viser tolk en fejlmeddelelse. Nedenfor er et kald til denne funktion med en og ingen argumenter sammen med deres respektive fejlmeddelelser.
>>> hilsen ("Monica") # kun ét argument TypeError: hilsen () mangler 1 krævet positionsargument: 'msg'
>>> hilsen () # ingen argumenter TypeError: hilsen () mangler 2 krævede positionelle argumenter: 'navn' og 'msg'
Argumenter for variabel funktion
Indtil nu havde funktioner et fast antal argumenter. I Python er der andre måder at definere en funktion, der kan tage variabelt antal argumenter.
Tre forskellige former af denne type er beskrevet nedenfor.
Python-standardargumenter
Funktionsargumenter kan have standardværdier i Python.
Vi kan levere en standardværdi til et argument ved hjælp af tildelingsoperatøren (=). Her er et eksempel.
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?")
Produktion
Hej Kate, Godmorgen! Hej Bruce, hvordan har du det?
I denne funktion har parameteren name
ikke en standardværdi og er påkrævet (obligatorisk) under et opkald.
På den anden side har parameteren msg
en standardværdi på "Good morning!"
. Så det er valgfrit under et opkald. Hvis der angives en værdi, overskriver den standardværdien.
Ethvert antal argumenter i en funktion kan have en standardværdi. Men når vi først har et standardargument, skal alle argumenter til højre også have standardværdier.
Dette betyder at sige, ikke-standardargumenter kan ikke følge standardargumenter. For eksempel, hvis vi havde defineret funktionsoverskriften ovenfor som:
def greet (msg = "God morgen!", navn):
Vi får en fejl som:
SyntaxError: ikke-standardargument følger standardargument
Python-søgeordsargumenter
Når vi kalder en funktion med nogle værdier, tildeles disse værdier til argumenterne i henhold til deres position.
For eksempel, i ovenstående funktion greet()
, når vi kaldte det som greet("Bruce", "How do you do?")
, "Bruce"
tildeles værdien til argumentnavnet og på samme måde "How do you do?"
som msg.
Python tillader funktioner at blive kaldt ved hjælp af søgeordsargumenter. Når vi kalder funktioner på denne måde, kan rækkefølgen (placeringen) af argumenterne ændres. Efterfølgende opkald til ovenstående funktion er alle gyldige og giver det samme resultat.
# 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?")
Som vi kan se, kan vi blande positionsargumenter med søgeordsargumenter under et funktionsopkald. Men vi skal huske på, at søgeordsargumenter skal følge positionelle argumenter.
At have et positionelt argument efter søgeordsargumenter vil resultere i fejl. F.eks. Kaldes funktionen som følger:
greet(name="Bruce","How do you do?")
Vil resultere i en fejl:
SyntaxError: ikke-søgeord arg efter søgeord arg
Python arbitrære argumenter
Nogle gange ved vi ikke på forhånd antallet af argumenter, der overføres til en funktion. Python giver os mulighed for at håndtere denne slags situation gennem funktionsopkald med et vilkårligt antal argumenter.
I funktionsdefinitionen bruger vi en stjerne (*) foran parameternavnet til at betegne denne form for argument. Her er et eksempel.
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")
Produktion
Hej Monica Hej Luke Hej Steve Hej John
Her har vi kaldt funktionen med flere argumenter. Disse argumenter pakkes ind i en tuple, før de overføres til funktionen. Inde i funktionen bruger vi en for
løkke til at hente alle argumenterne tilbage.