EMZETT.
Login

Kurz: Python bietet sehr flexible Möglichkeiten, Argumente zu übergeben: Standardwerte, Namen, beliebig viele Werte und mehr.

Teil des Kurses Python

Kapitel 22 von 44 im Kurs Python. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Python bietet sehr flexible Möglichkeiten, Argumente zu übergeben: Standardwerte, Namen, beliebig viele Werte und mehr.

Standardwerte

Ein Parameter mit = hat einen Standardwert und darf beim Aufruf weggelassen werden:

def begruesse(name, gruss="Hallo"):
    return f"{gruss}, {name}!"
 
print(begruesse("Mia"))
print(begruesse("Tom", "Guten Morgen"))

Ausgabe:

Hallo, Mia!
Guten Morgen, Tom!

Parameter mit Standardwert stehen immer hinter denen ohne.

Benannte Argumente (Keyword-Argumente)

Beim Aufruf kannst du Argumente beim Namen nennen. Dann ist die Reihenfolge egal, und der Aufruf wird lesbarer:

def rechteck(laenge, breite, einheit="cm"):
    return f"{laenge} x {breite} {einheit}"
 
print(rechteck(3, 4))
print(rechteck(breite=2, laenge=9))
print(rechteck(5, 6, einheit="m"))

Ausgabe:

3 x 4 cm
9 x 2 cm
5 x 6 m

Beliebig viele Argumente: *args

Mit *args sammelt eine Funktion alle zusätzlichen Argumente in einem Tupel:

def summe(*zahlen):
    print(zahlen)
    return sum(zahlen)
 
print(summe(1, 2, 3))
print(summe(10, 20))
print(summe())

Ausgabe:

(1, 2, 3)
6
(10, 20)
30
()
0

Beliebige benannte Argumente: **kwargs

Mit **kwargs landen zusätzliche benannte Argumente in einem Dictionary:

def profil(name, **angaben):
    print(name, angaben)
 
profil("Mia", alter=17, stadt="Köln")
profil("Tom")

Ausgabe:

Mia {'alter': 17, 'stadt': 'Köln'}
Tom {}

Listen und Dictionaries “auspacken”

Beim Aufruf entpackt * eine Liste in einzelne Argumente und ** ein Dictionary in benannte Argumente:

def addiere(a, b, c):
    return a + b + c
 
werte = [1, 2, 3]
print(addiere(*werte))
 
namen = {"a": 10, "b": 20, "c": 30}
print(addiere(**namen))

Ausgabe:

6
60

Nur-Positions- und Nur-Schlüsselwort-Parameter

Ein * in der Parameterliste erzwingt, dass alles dahinter benannt übergeben wird. Ein / legt fest, dass alles davor positional übergeben werden muss:

def kreis(*, radius, farbe="blau"):
    return f"Kreis r={radius}, {farbe}"
 
print(kreis(radius=3))

Ausgabe:

Kreis r=3, blau
kreis(3)

Fehlermeldung:

Traceback (most recent call last):
  File "beispiel.py", line 1, in <module>
    kreis(3)
TypeError: kreis() takes 0 positional arguments but 1 was given

Reihenfolge der Parameter

Die vollständige Reihenfolge in einer Definition lautet: normale Parameter, Parameter mit Standardwert, *args, nur benannte Parameter, **kwargs.

def alles(a, b=2, *args, c=3, **kwargs):
    return a, b, args, c, kwargs
 
print(alles(1))
print(alles(1, 20, 30, 40, c=50, x=60))

Ausgabe:

(1, 2, (), 3, {})
(1, 20, (30, 40), 50, {'x': 60})

Argumente sind Verweise

Übergibst du ein veränderliches Objekt, kann die Funktion es verändern. Bei unveränderlichen Werten geht das nicht:

def fuege_hinzu(liste):
    liste.append("neu")
 
meine_liste = ["alt"]
fuege_hinzu(meine_liste)
print(meine_liste)

Ausgabe:

['alt', 'neu']

Merke

  • Standardwerte: def f(a, b=10), Parameter mit Standardwert nach hinten
  • Benannte Argumente: f(b=2, a=1)
  • *args sammelt zusätzliche Positionsargumente (Tupel), **kwargs benannte (Dictionary)
  • Beim Aufruf entpacken *liste und **dict
  • * in der Definition erzwingt benannte Argumente
  • Veränderliche Argumente kann die Funktion ändern

Übungsaufgabe

Schreibe durchschnitt(*zahlen), die den Durchschnitt beliebig vieler Zahlen berechnet, und teste sie mit drei und mit fünf Werten.

Quiz zur Selbstkontrolle

auf?

  • f(*[1, 2]) (richtig)
  • f([1, 2])
  • f(**[1, 2])
  • f(&[1, 2])

Weiter im Kurs

Zurück: Funktionen

Weiter: Gültigkeitsbereich (Scope)

Alle Kapitel: Python im Überblick