Zum Inhalt springen
aviral gupta

// B3.2 · ca. 25 Min. · Einstieg

Standardwerte und Schlüsselwortargumente

Nach dieser Lektion geben Sie Parametern Standardwerte, übergeben Argumente per Name in beliebiger Reihenfolge und lesen die Fehler, die Python meldet, wenn ein Aufruf nicht zur Definition passt.

Lektion 2 von 5 in B3 Funktionen

Danach können Sie

  • Parametern Standardwerte geben und die Funktion mit oder ohne diese Argumente aufrufen
  • Argumente per Schlüsselwort übergeben, in beliebiger Reihenfolge, nach den positionellen
  • Fehler bei fehlenden, doppelten, unbekannten und falsch platzierten Argumenten lesen und beheben
  1. Aufwärmen · Aufgabe 1 von 7

    Aufwärmen aus Lektion B3.1: Was gibt das aus?

    def half(n):
        return n / 2
    
    print(half(half(8)))
  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es vorher, bevor Sie weiterlesen: Was gibt das aus?

    def greet(name, greeting="Hello"):
        return greeting + ", " + name + "!"
    
    print(greet("Ada"), greet("Bo", "Hi"))
  3. Üben · Aufgabe 3 von 7

    Geben Sie exponent den Standardwert 2, damit power(3) die 3 quadriert und power(2, 10) weiter funktioniert.

    def power(base, exponent____):
        return base ** exponent
    def power(base, exponent):
  4. Üben · Aufgabe 4 von 7

    Die Argumente sind benannt, in anderer Reihenfolge. Was gibt das aus?

    def describe(name, age, city):
        print(name, age, city)
    
    describe(city="Bonn", name="Lea", age=30)
  5. Üben · Aufgabe 5 von 7

    Gegeben ist def f(a, b=2): return a * 10 + b. Ordnen Sie jedem Aufruf sein Ergebnis zu.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Der Standardwert kommt aus einer Variablen, die sich später ändert. Was gibt das aus?

    rate = 0.2
    
    def with_tax(price, tax=rate):
        return price + price * tax
    
    rate = 0.5
    print(with_tax(100))
  7. Anwenden · Aufgabe 7 von 7

    Mini-Aufgabe. Schreiben Sie travel_time(distance, speed=50, stops=0, stop_minutes=5), das die Fahrzeit in Minuten zurückgibt: distance / speed * 60, plus stop_minutes für jeden Halt. Rufen Sie es dreimal auf: nur mit 100, mit speed=100 und mit stops=2.

    Prüfen Sie Ihr Ergebnis anhand dieser Liste

Selbst programmieren

Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.

Ausgearbeitetes Beispiel

Ein Kaffeepreis-Rechner

coffee_price hat drei Parameter, alle mit Standardwert: Ein Aufruf ohne Argumente ergibt einen mittleren Kaffee ohne Extras. Jeder Aufruf unten ändert etwas anderes. Positionelle Argumente füllen size und extra_shots der Reihe nach, Schlüsselwortargumente setzen oat_milk direkt, ohne die Parameter davor zu übergeben. Probieren Sie unten eine eigene Bestellung.

main.py

def coffee_price(size="medium", extra_shots=0, oat_milk=False):
    """Return the price of one coffee in euros."""
    if size == "small":
        price = 2.5
    elif size == "large":
        price = 3.5
    else:
        price = 3.0
    price = price + extra_shots * 0.6
    if oat_milk:
        price = price + 0.4
    return round(price, 2)


print(coffee_price())
print(coffee_price("large"))
print(coffee_price("small", 2))
print(coffee_price(oat_milk=True))
print(coffee_price(extra_shots=1, size="large", oat_milk=True))

Ausführen mit

python main.py

Ausgabe

3.0
3.5
3.7
3.4
4.5
  • coffee_price() verwendet alle drei Standardwerte: ein mittlerer Kaffee für 3.0.
  • coffee_price("small", 2) füllt size und extra_shots per Position: 2.5 + 2 * 0.6.
  • coffee_price(oat_milk=True) überspringt size und extra_shots, die ihre Standardwerte behalten.
  • Der letzte Aufruf benennt alle drei Argumente in eigener Reihenfolge.
Ändern und ausführen

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.

Übungen

Übung 1 von 2

Begrüßung mit Standardwerten

Ändern Sie greet in main.py, sodass es zwei weitere Parameter mit Standardwerten hat: greeting="Hello" und punctuation="!". Es gibt greeting, Komma und Leerzeichen, den Namen und punctuation zurück: greet("Ada") ergibt "Hello, Ada!" und greet("Ada", "Hi", punctuation="?") ergibt "Hi, Ada?".

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Fügen Sie die beiden Parameter nach name ein, jeweils mit = und ihrem Standardwert.

  2. Hinweis 2

    Ersetzen Sie im Rumpf das feste "Hello, " und "!" durch die Parameter.

  3. Hinweis 3

    def greet(name, greeting="Hello", punctuation="!"): und return greeting + ", " + name + punctuation.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

def greet(name, greeting="Hello", punctuation="!"):
    """Return a greeting for name."""
    return greeting + ", " + name + punctuation


print(greet("Ada"))
Auf dem eigenen Computer ausführen

Installieren Sie Python 3.14 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.py

def greet(name):
    """Return a greeting for name."""
    return "Hello, " + name + "!"


print(greet("Ada"))

test_main.py

from main import greet


def test_defaults():
    """greet("Ada") verwendet beide Standardwerte"""
    got = greet("Ada")
    assert got == "Hello, Ada!", f"greet('Ada') lieferte {got!r}, erwartet: 'Hello, Ada!'"


def test_greeting_by_position():
    """greet("Ada", "Hi") ersetzt die Begrüßung"""
    got = greet("Ada", "Hi")
    assert got == "Hi, Ada!", f"greet('Ada', 'Hi') lieferte {got!r}, erwartet: 'Hi, Ada!'"


def test_punctuation_by_keyword():
    """greet("Ada", punctuation="?") behält die Standard-Begrüßung"""
    got = greet("Ada", punctuation="?")
    assert got == "Hello, Ada?", f"greet('Ada', punctuation='?') lieferte {got!r}, erwartet: 'Hello, Ada?'"


def test_all_keywords():
    """Alle drei Argumente per Schlüsselwort, in anderer Reihenfolge"""
    got = greet(punctuation=".", name="Bo", greeting="Bye")
    assert got == "Bye, Bo.", f"greet(punctuation='.', name='Bo', greeting='Bye') lieferte {got!r}, erwartet: 'Bye, Bo.'"

Unter macOS und Linux tippen Sie python3, wo in diesen Befehlen python steht, wie in der ersten Lektion.

Programm ausführen:

python main.py

Prüfungen ausführen (learnrun.py muss im selben Ordner liegen):

python learnrun.py test
learnrun.py herunterladen

Übung 2 von 2

Versandkosten

shipping(weight, express=False, country="DE") gibt die Kosten in Euro zurück. Der Grundpreis ist 5 bis 2 kg, 8 bis 10 kg und 15 darüber. express=True verdoppelt den Grundpreis. Jedes Land außer "DE" addiert danach 10. Der Starter liefert immer 5; bringen Sie jede Regel zum Laufen.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser Python herunter (bis zu 6.5 MB) und speichert es im Cache. Ihr Code bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Beginnen Sie mit einer if-, elif- und else-Kette über weight, die eine Variable cost setzt.

  2. Hinweis 2

    Dann zwei getrennte if-Anweisungen: Eine verdoppelt cost, wenn express wahr ist, eine addiert 10, wenn country != "DE".

  3. Hinweis 3

    Die Reihenfolge zählt: erst verdoppeln, dann 10 addieren. Am Ende steht return cost.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

def shipping(weight, express=False, country="DE"):
    """Return the shipping cost in euros."""
    if weight <= 2:
        cost = 5
    elif weight <= 10:
        cost = 8
    else:
        cost = 15
    if express:
        cost = cost * 2
    if country != "DE":
        cost = cost + 10
    return cost


print(shipping(5, express=True, country="FR"))
Auf dem eigenen Computer ausführen

Installieren Sie Python 3.14 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.py

def shipping(weight, express=False, country="DE"):
    """Return the shipping cost in euros."""
    return 5


print(shipping(5, express=True, country="FR"))

test_main.py

from main import shipping


def test_weights():
    """1 kg, 5 kg und 12 kg kosten 5, 8 und 15"""
    got = shipping(1), shipping(5), shipping(12)
    assert got == (5, 8, 15), f"shipping(1), shipping(5) und shipping(12) lieferten {got!r}, erwartet: (5, 8, 15)"


def test_boundaries():
    """2 kg kosten 5 und 10 kg kosten 8"""
    got = shipping(2), shipping(10)
    assert got == (5, 8), f"shipping(2) und shipping(10) lieferten {got!r}, erwartet: (5, 8)"


def test_express():
    """express=True verdoppelt den Preis"""
    got = shipping(1, express=True)
    assert got == 10, f"shipping(1, express=True) lieferte {got!r}, erwartet: 10"


def test_abroad():
    """Ein anderes Land addiert 10, auch per Schlüsselwort in beliebiger Reihenfolge"""
    got = shipping(5, country="AT"), shipping(country="AT", weight=1)
    assert got == (18, 15), f"shipping(5, country='AT') und shipping(country='AT', weight=1) lieferten {got!r}, erwartet: (18, 15)"


def test_express_abroad():
    """Express ins Ausland: erst verdoppeln, dann 10 addieren"""
    got = shipping(5, express=True, country="FR")
    assert got == 26, f"shipping(5, express=True, country='FR') lieferte {got!r}, erwartet: 26"

Unter macOS und Linux tippen Sie python3, wo in diesen Befehlen python steht, wie in der ersten Lektion.

Programm ausführen:

python main.py

Prüfungen ausführen (learnrun.py muss im selben Ordner liegen):

python learnrun.py test
learnrun.py herunterladen

Häufige Fehler

Ein Standardwert vor einem Pflichtparameter

def greet(greeting="Hello", name):
    return greeting + ", " + name

Was Python ausgibt

SyntaxError: parameter without a default follows parameter with a default

Warum, und die Lösung

Hat ein Parameter einen Standardwert, braucht jeder Parameter danach auch einen; sonst könnte Python nicht erkennen, welches Argument wohin gehört. Stellen Sie Pflichtparameter nach vorn: def greet(name, greeting="Hello"):.

Ein positionelles Argument nach einem Schlüsselwortargument

def greet(name, greeting="Hello"):
    return greeting + ", " + name

print(greet(greeting="Hi", "Ada"))

Was Python ausgibt

SyntaxError: positional argument follows keyword argument

Warum, und die Lösung

In einem Aufruf kommen positionelle Argumente zuerst, Schlüsselwortargumente danach. Schreiben Sie greet("Ada", greeting="Hi") oder benennen Sie beide: greet(greeting="Hi", name="Ada"). Python prüft das, bevor irgendetwas läuft, also scheitert die ganze Datei.

Ein Tippfehler im Schlüsselwort

def greet(name, greeting="Hello"):
    return greeting + ", " + name

print(greet("Ada", greting="Hi"))

Was Python ausgibt

TypeError: greet() got an unexpected keyword argument 'greting'

Warum, und die Lösung

Ein Schlüsselwort muss genau einem Parameternamen entsprechen. Python 3.14 ergänzt die Meldung um einen Vorschlag, hier Did you mean 'greeting'?. Korrigieren Sie die Schreibweise im Aufruf.

Python im Browser: Pyodide 314.0.7, MPL-2.0. Lizenz und Quellcode

Abschlussquiz

5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.

Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.

Problem melden

Etwas ist falsch oder unklar? Beschreiben Sie es kurz, dann wird es geprüft und korrigiert.

#

Mindestens 20 Zeichen.

Nur, wenn Sie eine Antwort wünschen.

Kernideen

Standardwerte machen Argumente optional

def greet(name, greeting="Hello"): gibt greeting einen Standardwert. greet("Ada") verwendet "Hello", greet("Ada", "Hi") überschreibt ihn. Parameter mit Standardwert müssen nach denen ohne stehen: def greet(greeting="Hello", name): ist ein SyntaxError. Der Standardwert wird einmal ausgewertet, wenn das def läuft, nicht bei jedem Aufruf. Bei Zahlen und Strings ist das harmlos, eine Liste als Standardwert wird aber von allen Aufrufen geteilt; Lektion B4.6 zeigt diese Falle und die Lösung.

Schlüsselwortargumente nennen den Parameter

Ein Aufruf kann den Parameter benennen: greet(name="Ada", greeting="Hi"). Benannte Argumente dürfen in beliebiger Reihenfolge stehen und funktionieren auch für Pflichtparameter. Sie machen Aufrufe lesbar, wie coffee_price(oat_milk=True), und erlauben, frühere Standardwerte zu überspringen. Positionelle Argumente kommen zuerst: greet("Ada", greeting="Hi") ist in Ordnung, greet(greeting="Hi", "Ada") dagegen ein SyntaxError, und Python führt die Datei gar nicht aus.

Argumentfehler lesen

Python prüft jeden Aufruf gegen das def und benennt das Problem. missing 1 required positional argument: Ein Parameter ohne Standardwert hat keinen Wert bekommen. got multiple values for argument: Derselbe Parameter wurde per Position und noch einmal per Name gefüllt. got an unexpected keyword argument: Kein Parameter heißt so, oft ein Tippfehler, und Python schlägt den ähnlichsten Namen vor. positional argument follows keyword argument: Ordnen Sie den Aufruf um, positionelle Argumente zuerst.

Quellen

Zuletzt geprüft am 29. September 2026