I Python kan du definiera en funktion som tar variabelt antal argument. I den här artikeln lär du dig att definiera sådana funktioner med standard-, nyckelord- och godtyckliga argument.
Video: Argument för Python-funktion: Position, Nyckelord och Standard
Argument
I det användardefinierade funktionsämnet lärde vi oss att definiera en funktion och anropa den. I annat fall resulterar funktionsanropet i ett fel. Här är ett exempel.
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, god morgon!
Här har funktionen greet()
två parametrar.
Eftersom vi har kallat den här funktionen med två argument går den smidigt och vi får inget fel.
Om vi kallar det med ett annat antal argument visar tolk ett felmeddelande. Nedan finns ett samtal till denna funktion med ett och inga argument tillsammans med deras respektive felmeddelanden.
>>> hälsning ("Monica") # bara ett argument TypeError: hälsning () saknas 1 obligatoriskt positioneringsargument: 'msg'
>>> hälsar () # inga argument TypeError: hälsar () saknas 2 nödvändiga positionella argument: 'namn' och 'msg'
Argument för variabel funktion
Fram till nu hade funktioner ett fast antal argument. I Python finns det andra sätt att definiera en funktion som kan ta varierande antal argument.
Tre olika former av denna typ beskrivs nedan.
Python-standardargument
Funktionsargument kan ha standardvärden i Python.
Vi kan tillhandahålla ett standardvärde för ett argument med hjälp av tilldelningsoperatören (=). Här är ett exempel.
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, god morgon! Hej Bruce, hur mår du?
I den här funktionen har parametern name
inte ett standardvärde och krävs (obligatoriskt) under ett samtal.
Å andra sidan har parametern msg
ett standardvärde på "Good morning!"
. Så det är valfritt under ett samtal. Om ett värde anges kommer det att skriva över standardvärdet.
Vilket antal argument som helst i en funktion kan ha ett standardvärde. Men när vi väl har ett standardargument måste alla argument till höger också ha standardvärden.
Det innebär att säga att icke-standardargument inte kan följa standardargument. Till exempel om vi hade definierat funktionshuvudet ovan som:
def greet (msg = "God morgon!", namn):
Vi skulle få ett fel som:
SyntaxError: icke-standard argument följer standard argument
Python-sökordsargument
När vi kallar en funktion med vissa värden tilldelas dessa värden till argumenten enligt deras position.
Till exempel, i ovanstående funktion greet()
, när vi kallade det som greet("Bruce", "How do you do?")
, "Bruce"
tilldelas värdet argumentnamnet och på samma sätt "How do you do?"
till msg.
Python gör att funktioner kan anropas med hjälp av nyckelordargument. När vi kallar funktioner på detta sätt kan argumenten ordning (position) ändras. Följande samtal till ovanstående funktion är alla giltiga och ger samma 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 blanda positionsargument med nyckelordargument under ett funktionsanrop. Men vi måste komma ihåg att sökordsargument måste följa positionella argument.
Att ha ett lägesargument efter sökordsargument leder till fel. Funktionsanropet till exempel enligt följande:
greet(name="Bruce","How do you do?")
Resultatet blir ett fel:
SyntaxError: icke-nyckelord arg efter nyckelord arg
Python godtyckliga argument
Ibland vet vi inte i förväg antalet argument som kommer att skickas till en funktion. Python tillåter oss att hantera denna typ av situation genom funktionssamtal med ett godtyckligt antal argument.
I funktionsdefinitionen använder vi en asterisk (*) före parameternamnet för att beteckna denna typ av argument. Här är ett exempel.
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
Här har vi kallat funktionen med flera argument. Dessa argument lindas in i en tuple innan de överförs till funktionen. Inuti funktionen använder vi en for
slinga för att hämta tillbaka alla argument.