Kapitel 2 · Übung
Ausdrucksstärkere Funktionen
Nützliche Standardwerte
Ein guter Standardwert gibt einer Funktion eine nützliche übliche Auswahl. Betrachte eine Funktion, die eine Frage beschriftet:
def question_label(number, prefix):
return f"{prefix} {number}"
Jeder Aufrufer muss dann beide Werte übergeben. Das ist sinnvoll, wenn jede Auswahl wichtig ist:
question_label(3, "Question")
Manchmal gibt es für einen Wert eine naheliegende übliche Auswahl. Die meisten Beschriftungen können das Präfix "Question" verwenden. Ein Standardwert für einen Parameter hält diese übliche Auswahl in der Funktionsdefinition fest:
def question_label(number, prefix="Question"):
return f"{prefix} {number}"
Jetzt sind beide Aufrufe gültig:
question_label(3)
question_label(3, "Challenge")
Der erste Aufruf verwendet "Question". Der zweite ersetzt den Standardwert durch "Challenge".
Standardwerte drücken eine Regel aus
Ein guter Standardwert ist nicht nur praktisch. Er vermittelt, was die Funktion normalerweise tut. Aufrufer nennen nur die ungewöhnlichen Entscheidungen, sodass der häufige Fall kurz bleibt.
Verwende einen Standardwert, wenn:
eine Auswahl sicher und nicht überraschend ist;
die meisten Aufrufer diese Auswahl verwenden sollten;
Aufrufer sie weiterhin ersetzen können, wenn ihre Situation anders ist.
Verstecke keine wesentlichen Informationen hinter einem erfundenen Standardwert. Eine Beschriftungsfunktion braucht weiterhin die tatsächliche Fragenummer.
Erforderliche Parameter müssen vor Parametern mit Standardwerten stehen:
def question_label(number, prefix="Question"):
...
Python lehnt eine Definition ab, die in diesem Beispiel einen erforderlichen Parameter hinter prefix setzt.
Was gibt dieser Code aus?
def greet(name, punctuation="!"):
return f"Hello, {name}{punctuation}"
print(greet("Ada"))
print(greet("Ada", "."))Füge einen nützlichen Standardwert hinzu
Der Editor enthält eine Funktion zum Formatieren einer Punktzahl. Gib label den Standardwert "Score" und gib dann den formatierten Text zurück. Die Funktion sollte sowohl mit als auch ohne ausdrückliche Beschriftung funktionieren.
Aufgabe
Vervollständige format_score.
scoreundtotalmüssen erforderlich bleiben.labelmuss standardmäßig"Score"sein.Gib Text in der Form
Label: score/totalzurück.
Gib innerhalb der Funktion nichts aus. Die vorgegebenen Aufrufe übernehmen die Anzeige.