Ausdrucksstärkere Funktionen · Übung
Positions- und Schlüsselwortargumente
Die vorige Lektion hat einem Parameter einen Standardwert gegeben. Dadurch wurde dieser kürzere Aufruf möglich:
format_score(7, 10)
Python muss weiterhin wissen, welcher Wert zu welchem Parameter gehört. Diese Lektion betrachtet die beiden Wege, auf denen wir diese Verbindung herstellen können.
Betrachte eine Funktion, die einen Quizversuch beschreibt:
def describe_attempt(learner, score, total, status="complete"):
...
Die Namen learner, score, total und status sind Parameter. Sie gehören zur Funktionsdefinition. Wenn wir die Funktion aufrufen, heißen die übergebenen Werte Argumente.
Lass die Reihenfolge die Bedeutung vermitteln
In diesem Aufruf sind die Argumente nicht benannt:
describe_attempt("Mina", 8, 10)
Python verwendet ihre Positionen. Der erste Wert, "Mina", gehört zum ersten Parameter, learner. Die nächsten beiden Werte werden zu score und total. So übergebene Argumente heißen Positionsargumente.
Das funktioniert gut, wenn es nur wenige Werte gibt und ihre Bedeutung leicht erkennbar ist. Ein weiterer String macht den Aufruf weniger eindeutig:
describe_attempt("Mina", 8, 10, "needs review")
Der Code funktioniert, aber beim Lesen musst du womöglich zur Funktionsdefinition zurückgehen, um herauszufinden, was "needs review" bedeutet.
Benenne ein Argument am Funktionsaufruf
Wir können den Parameternamen zusammen mit dem Wert schreiben:
describe_attempt("Mina", 8, 10, status="needs review")
Mit status= wird der Zweck des letzten Strings direkt am Funktionsaufruf sichtbar. Das ist ein Schlüsselwortargument.
Wir können auch jedes Argument benennen:
describe_attempt(
learner="Mina",
score=8,
total=10,
status="needs review",
)
Beide Schreibweisen rufen dieselbe Funktion auf. Positionsargumente halten kurze, vertraute Aufrufe kompakt. Schlüsselwortargumente sind nützlich für optionale Entscheidungen und für Werte, deren Zweck sonst schwer zu erraten wäre.
Wenn ein Aufruf die beiden Schreibweisen mischt, müssen Positionsargumente zuerst stehen. Nach dem ersten Schlüsselwortargument müssen alle verbleibenden Argumente ebenfalls benannt sein.
Welcher Aufruf ändert am deutlichsten nur den optionalen Status?
Probiere beide Schreibweisen aus
Die Funktion im Editor ist bereits vollständig. Erstelle eine Liste namens reports mit zwei Aufrufen, um die Wahl der Argumentübergabe zu üben:
Verwende Positionsargumente für Minas Namen, Punktzahl und Gesamtzahl. Lass den Standardstatus gelten.
Übergib Noahs Namen als Positionsargument und verwende dann Schlüsselwortargumente für
score,totalundstatus.
Der erste Aufruf verwendet den Standardwert aus der vorigen Lektion. Der zweite macht Noahs ungewöhnlichen Status durch die Benennung sichtbar.
Aufgabe
Ersetze die leere Liste reports durch zwei Aufrufe von describe_attempt.
Mina hat 8 von 10 Punkten erreicht. Lass den Standardstatus gelten.
Noah hat 6 von 10 Punkten erreicht und hat den Status
"needs review".Übergib bei Noah
score,totalundstatusals Schlüsselwortargumente.
Behalte die vorgegebene Schleife bei, die jeden Bericht ausgibt.