Python lässt zu, dass Funktionsargumente Standardwerte haben. Wird die Funktion ohne das Argument aufgerufen, erhält das Argument seinen Standardwert.
Standardargumente:
Python bietet eine andere Möglichkeit, Syntax und Standardwerte für Funktionsargumente darzustellen. Standardwerte geben an, dass das Funktionsargument diesen Wert annimmt, wenn während des Funktionsaufrufs kein Argumentwert übergeben wird. Der Standardwert wird mithilfe des Zuweisungsoperators (=) des Formulars zugewiesen Schlüsselwortname =Wert.
Lassen Sie uns dies anhand einer Funktion verstehen Student . Die Funktion Student enthält 3 Argumente, von denen 2 Argumente mit Standardwerten zugewiesen sind. Also die Funktion Student akzeptiert ein erforderliches Argument ( Vorname ), und die restlichen zwei Argumente sind optional.
Python3
def> student(firstname, lastname> => 'Mark'> , standard> => 'Fifth'> ):> > print> (firstname, lastname,> 'studies in'> , standard,> 'Standard'> )> |
>
>
Java-String-Replaceall
Beim Aufrufen von Funktionen müssen wir folgende Punkte beachten:
- Bei der Übergabe der Schlüsselwortargumente ist die Reihenfolge der Argumente wichtig.
- Für einen Parameter sollte es nur einen Wert geben.
- Der übergebene Schlüsselwortname sollte mit dem tatsächlichen Schlüsselwortnamen übereinstimmen.
- Beim Aufruf einer Funktion, die Nicht-Schlüsselwortargumente enthält, ist die Reihenfolge wichtig.
Beispiel 1: Aufrufen von Funktionen ohne Schlüsselwortargumente
Python3
def> student(firstname, lastname> => 'Mark'> , standard> => 'Fifth'> ):> > print> (firstname, lastname,> 'studies in'> , standard,> 'Standard'> )> # 1 positional argument> student(> 'John'> )> # 3 positional arguments> student(> 'John'> ,> 'Gates'> ,> 'Seventh'> )> # 2 positional arguments> student(> 'John'> ,> 'Gates'> )> student(> 'John'> ,> 'Seventh'> )> |
>
>
Ausgabe:
John Mark studies in Fifth Standard John Gates studies in Seventh Standard John Gates studies in Fifth Standard John Seventh studies in Fifth Standard>
Beim ersten Aufruf gibt es nur ein erforderliches Argument und die restlichen Argumente verwenden die Standardwerte. Beim zweiten Anruf Familienname, Nachname und der Wert der Standardargumente wird vom Standardwert durch den neuen Übergabewert ersetzt. Wir können erkennen, dass die Reihenfolge der Argumente beim 2., 3. und 4. Aufruf der Funktion wichtig ist.
Beispiel #2: Aufrufen von Funktionen mit Schlüsselwortargumenten
Python3
Bourne-Again-Shell
def> student(firstname, lastname> => 'Mark'> , standard> => 'Fifth'> ):> > print> (firstname, lastname,> 'studies in'> , standard,> 'Standard'> )> # 1 keyword argument> student(firstname> => 'John'> )> # 2 keyword arguments> student(firstname> => 'John'> , standard> => 'Seventh'> )> # 2 keyword arguments> student(lastname> => 'Gates'> , firstname> => 'John'> )> |
>
>
Ausgabe:
John Mark studies in Fifth Standard John Mark studies in Seventh Standard John Gates studies in Fifth Standard>
Beim ersten Aufruf gibt es nur ein erforderliches Schlüsselwortargument. Im zweiten Aufruf ist eines ein erforderliches Argument und eines ein optionales Argument (Standard), dessen Wert vom Standardwert durch einen neuen Übergabewert ersetzt wird. Im dritten Aufruf können wir sehen, dass die Reihenfolge im Schlüsselwortargument nicht wichtig ist.
Beispiel Nr. 3: Einige ungültige Funktionsaufrufe
Python3
def> student(firstname, lastname> => 'Mark'> , standard> => 'Fifth'> ):> > print> (firstname, lastname,> 'studies in'> , standard,> 'Standard'> )> # required argument missing> student()> # non keyword argument after a keyword argument> student(firstname> => 'John'> ,> 'Seventh'> )> # unknown keyword argument> student(subject> => 'Maths'> )> |
>
>
Der obige Code löst einen Fehler aus, weil:
- Beim ersten Aufruf wird kein Wert als Parameter übergeben Vorname Das ist der erforderliche Parameter.
- Im zweiten Aufruf steht nach einem Schlüsselwortargument ein Nicht-Schlüsselwortargument.
- Beim dritten Aufruf wird das übergebene Schlüsselwortargument nicht mit den tatsächlichen Schlüsselwortnamenargumenten abgeglichen.
Verwendung veränderlicher Objekte als Standardargumentwerte in Python
Dies muss sehr sorgfältig erfolgen. Der Grund dafür ist, dass die Standardwerte der Argumente nur einmal ausgewertet werden, wenn das Steuerelement die Funktion erreicht
Definition zum ersten Mal. Danach wird in den nachfolgenden Funktionsaufrufen auf dieselben Werte (oder veränderlichen Objekte) verwiesen.
Anhand des Beispiels wird es viel klarer
Python3
# mutable default argument values example using python list> # itemName is the name of the item that we want to add to list> # that is being passed, or if it is not passed then appending in> # the default list> def> appendItem(itemName, itemList> => []):> > itemList.append(itemName)> > return> itemList> print> (appendItem(> 'notebook'> ))> print> (appendItem(> 'pencil'> ))> print> (appendItem(> 'eraser'> ))> |
>
>Ausgabe
wenn von Rudyard Kipling Zusammenfassung
['notebook'] ['notebook', 'pencil'] ['notebook', 'pencil', 'eraser']>
Was Sie erwartet haben, wenn Sie davon ausgehen, dass bei jedem Funktionsaufruf eine neue Liste erstellt wird, wenn wir ihr keine Liste übergeben
['Notizbuch']
['Bleistift']
['Radiergummi']
Aber wie Sie in der tatsächlichen Ausgabe des Programms sehen können, wird bei jedem Aufruf der Funktion dieselbe Liste verwendet und bei einem neuen Aufruf keine neue Liste erstellt.
Beispiel mit Wörterbuch
Python3
# mutable default argument values example using python dictionary> # itemName is the name of item and quantity is the number of such> # items are there> def> addItemToDictionary(itemName, quantity, itemList> => {}):> > itemList[itemName]> => quantity> > return> itemList> print> (addItemToDictionary(> 'notebook'> ,> 4> ))> print> (addItemToDictionary(> 'pencil'> ,> 1> ))> print> (addItemToDictionary(> 'eraser'> ,> 1> ))> |
Matrixprogramm in C-Sprache
>
>Ausgabe
{'notebook': 4} {'notebook': 4, 'pencil': 1} {'notebook': 4, 'pencil': 1, 'eraser': 1}>
Was Sie erwartet haben, wenn Sie davon ausgehen, dass bei jedem Funktionsaufruf ein neues Wörterbuch erstellt wird
{'Notizbuch': 4}
{‘Bleistift’: 1}
{‘Radiergummi’: 1}
Sie können jedoch deutlich erkennen, dass die tatsächliche Ausgabe des Programms unterschiedlich ist und darauf hinweist, dass bei jedem nachfolgenden Aufruf dasselbe Wörterbuch verwendet wird.
Die wichtigste Erkenntnis hier ist, dass wir solche Szenarien vermeiden sollten.
Empfohlene Vorgehensweise
Weisen Sie den Standardwert „Keine“ zu und prüfen Sie dann in der Funktion, ob das erwartete Listen- oder Wörterbuchargument „Keine“ ist oder nicht.
Wenn es keines gibt, weisen Sie es je nach Ihren Anforderungen einer Liste oder einem Wörterbuch zu.
Python3
# using None as values of the default arguments> print> (> '#list'> )> def> appendItem(itemName, itemList> => None> ):> > if> itemList> => => None> :> > itemList> => []> > itemList.append(itemName)> > return> itemList> print> (appendItem(> 'notebook'> ))> print> (appendItem(> 'pencil'> ))> print> (appendItem(> 'eraser'> ))> # using None as value of default parameter> print> (> '
#dictionary'> )> def> addItemToDictionary(itemName, quantity, itemList> => None> ):> > if> itemList> => => None> :> > itemList> => {}> > itemList[itemName]> => quantity> > return> itemList> print> (addItemToDictionary(> 'notebook'> ,> 4> ))> print> (addItemToDictionary(> 'pencil'> ,> 1> ))> print> (addItemToDictionary(> 'eraser'> ,> 1> ))> |
>
>Ausgabe
#list ['notebook'] ['pencil'] ['eraser'] #dictionary {'notebook': 4} {'pencil': 1} {'eraser': 1}>
Hier können Sie deutlich erkennen, dass jedes Mal, wenn eine Funktion aufgerufen wird und der Funktion keine Liste oder kein Wörterbuch als Argument übergeben wird, eine neue Liste oder ein neues Wörterbuch erstellt wird.