In Python können Sie eine Funktion definieren, die eine variable Anzahl von Argumenten akzeptiert. In diesem Artikel lernen Sie, solche Funktionen mit Standard-, Schlüsselwort- und beliebigen Argumenten zu definieren.
Video: Python-Funktionsargumente: Position, Schlüsselwörter und Standard
Argumente
Im Thema Benutzerdefinierte Funktionen haben wir gelernt, wie eine Funktion definiert und aufgerufen wird. Andernfalls führt der Funktionsaufruf zu einem Fehler. Hier ist ein Beispiel.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Ausgabe
Hallo Monica, guten Morgen!
Hier hat die Funktion greet()
zwei Parameter.
Da wir diese Funktion mit zwei Argumenten aufgerufen haben, läuft sie reibungslos und es wird kein Fehler angezeigt.
Wenn wir es mit einer anderen Anzahl von Argumenten aufrufen, zeigt der Interpreter eine Fehlermeldung an. Im Folgenden finden Sie einen Aufruf dieser Funktion mit einem und keinen Argumenten sowie den entsprechenden Fehlermeldungen.
>>> greet ("Monica") # nur ein Argument TypeError: greet () fehlt 1 erforderliches Positionsargument: 'msg'
>>> greet () # keine Argumente TypeError: greet () fehlt 2 erforderliche Positionsargumente: 'name' und 'msg'
Argumente für variable Funktionen
Bisher hatten Funktionen eine feste Anzahl von Argumenten. In Python gibt es andere Möglichkeiten, eine Funktion zu definieren, die eine variable Anzahl von Argumenten annehmen kann.
Drei verschiedene Formen dieses Typs werden nachstehend beschrieben.
Python-Standardargumente
Funktionsargumente können in Python Standardwerte haben.
Mit dem Zuweisungsoperator (=) können wir einem Argument einen Standardwert zuweisen. Hier ist ein Beispiel.
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?")
Ausgabe
Hallo Kate, guten Morgen! Hallo Bruce, wie geht es dir?
In dieser Funktion hat der Parameter name
keinen Standardwert und ist während eines Aufrufs erforderlich (obligatorisch).
Andererseits hat der Parameter msg
einen Standardwert von "Good morning!"
. Es ist also während eines Anrufs optional. Wenn ein Wert angegeben wird, wird der Standardwert überschrieben.
Eine beliebige Anzahl von Argumenten in einer Funktion kann einen Standardwert haben. Sobald wir jedoch ein Standardargument haben, müssen alle Argumente rechts davon auch Standardwerte haben.
Dies bedeutet, dass nicht standardmäßige Argumente nicht auf Standardargumente folgen können. Wenn wir beispielsweise den obigen Funktionsheader wie folgt definiert hätten:
def greet (msg = "Guten Morgen!", Name):
Wir würden eine Fehlermeldung erhalten als:
SyntaxError: Nicht standardmäßiges Argument folgt Standardargument
Python-Schlüsselwortargumente
Wenn wir eine Funktion mit einigen Werten aufrufen, werden diese Werte den Argumenten entsprechend ihrer Position zugewiesen.
In der obigen Funktion greet()
wird greet("Bruce", "How do you do?")
der Wert beispielsweise, wenn wir ihn als nennen , "Bruce"
dem Argumentnamen und ähnlich "How do you do?"
wie msg zugewiesen .
Mit Python können Funktionen mithilfe von Schlüsselwortargumenten aufgerufen werden. Wenn wir Funktionen auf diese Weise aufrufen, kann die Reihenfolge (Position) der Argumente geändert werden. Die folgenden Aufrufe der obigen Funktion sind alle gültig und führen zum gleichen Ergebnis.
# 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?")
Wie wir sehen können, können wir während eines Funktionsaufrufs Positionsargumente mit Schlüsselwortargumenten mischen. Wir müssen jedoch berücksichtigen, dass Schlüsselwortargumente Positionsargumenten folgen müssen.
Ein Positionsargument nach Schlüsselwortargumenten führt zu Fehlern. Zum Beispiel lautet der Funktionsaufruf wie folgt:
greet(name="Bruce","How do you do?")
Wird zu einem Fehler führen:
SyntaxError: Nicht-Schlüsselwort arg nach Schlüsselwort arg
Beliebige Python-Argumente
Manchmal wissen wir nicht im Voraus, wie viele Argumente an eine Funktion übergeben werden. Python ermöglicht es uns, diese Art von Situation durch Funktionsaufrufe mit einer beliebigen Anzahl von Argumenten zu behandeln.
In der Funktionsdefinition verwenden wir ein Sternchen (*) vor dem Parameternamen, um diese Art von Argument zu kennzeichnen. Hier ist ein Beispiel.
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")
Ausgabe
Hallo Monica Hallo Luke Hallo Steve Hallo John
Hier haben wir die Funktion mit mehreren Argumenten aufgerufen. Diese Argumente werden in ein Tupel eingeschlossen, bevor sie an die Funktion übergeben werden. Innerhalb der Funktion verwenden wir eine for
Schleife, um alle Argumente zurückzugewinnen.