0%

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.

  • score und total müssen erforderlich bleiben.

  • label muss standardmäßig "Score" sein.

  • Gib Text in der Form Label: score/total zurück.

Gib innerhalb der Funktion nichts aus. Die vorgegebenen Aufrufe übernehmen die Anzeige.