Python Lernhandbuch

Kapitel 6: Funktionen · Abschnitt 2 von 7

Parameter im Detail

python
def bestelle(artikel, menge=1, *, rabatt=0.0):
    summe = menge * 10 * (1 - rabatt)
    return f'{menge}x {artikel}: {summe:.2f}'

bestelle('Stift')                      # 1x Stift: 10.00
bestelle('Stift', 5)                   # 5x Stift: 50.00
bestelle('Stift', menge=5)             # Schlüsselwort-Aufruf
bestelle(menge=5, artikel='Stift')     # Reihenfolge egal bei Schlüsselwörtern
bestelle('Stift', 5, rabatt=0.1)       # 5x Stift: 45.00
Art Schreibweise in der Definition Aufruf Bedeutung
Positional def f(a, b) f(1, 2) Reihenfolge entscheidet
Schlüsselwort def f(a, b) f(b=2, a=1) Name entscheidet, Reihenfolge egal
Standardwert def f(a, b=10) f(1) Fehlender Parameter bekommt den Standardwert. Parameter mit Standardwert müssen nach denen ohne stehen
Nur Schlüsselwort def f(a, *, b) f(1, b=2) Alles nach dem * muss mit Namen übergeben werden
Nur positional def f(a, /, b) f(1, b=2) Alles vor dem / darf nicht mit Namen übergeben werden
Beliebig viele positional def f(*args) f(1, 2, 3) args ist ein Tupel (1, 2, 3)
Beliebig viele Schlüsselwörter def f(**kwargs) f(a=1, b=2) kwargs ist ein Dictionary {'a': 1, 'b': 2}
python
def summe(*zahlen):
    return sum(zahlen)

summe(1, 2, 3)          # 6
werte = [4, 5, 6]
summe(*werte)           # 15: * entpackt die Liste in einzelne Argumente

def verbinde(**optionen):
    return optionen

config = {'host': 'localhost', 'port': 5432}
verbinde(**config)      # ** entpackt das Dictionary in Schlüsselwörter

Das ist wichtig, weil Bibliotheken (z. B. psycopg.connect(host=..., port=...)) genau so aufgerufen werden.

Die größte Falle: veränderliche Standardwerte.

python
def falsch(x, liste=[]):      # die Liste wird nur EINMAL beim Definieren erzeugt
    liste.append(x)
    return liste

falsch(1)    # [1]
falsch(2)    # [1, 2]  Überraschung!

def richtig(x, liste=None):
    if liste is None:
        liste = []
    liste.append(x)
    return liste

Tipp: Bei Python-Beispielen kannst du auf ▶ Ausprobieren klicken, den Code verändern und direkt ausführen.

← Zurück