Wie man Standardargumente in Python-Funktionen verwendet und beachtet

Geschäft

Das Setzen eines Standardarguments in einer Python-Funktionsdefinition bewirkt, dass der Standardwert verwendet wird, wenn das Argument während eines Funktionsaufrufs ausgelassen wird.

Im Folgenden werden die Einzelheiten beschrieben.

  • Festlegen von Standardargumenten
  • Beschränkungen für die Position von Standardargumenten
  • Wenn eine Liste oder ein Wörterbuch als Standardwert verwendet wird, ist zu beachten, dass

Festlegen von Standardargumenten

Wenn Argumentname = Standardwert in der Funktionsdefinition, wird der Standardwert verwendet, wenn das entsprechende Argument weggelassen wird.

def func_default(arg1, arg2='default_x', arg3='default_y'):
    print(arg1)
    print(arg2)
    print(arg3)

func_default('a')
# a
# default_x
# default_y

func_default('a', 'b')
# a
# b
# default_y

func_default('a', arg3='c')
# a
# default_x
# c

Beschränkungen für die Position von Standardargumenten

Wird bei der Definition einer Funktion ein Standardargument vor ein normales Argument (ein Argument, für das kein Standardwert angegeben ist) gesetzt, führt dies zu einem Fehler.
SyntaxError

# def func_default_error(arg2='default_a', arg3='default_b', arg1):
#     print(arg1)
#     print(arg2)

# SyntaxError: non-default argument follows default argument

Wenn eine Liste oder ein Wörterbuch als Standardwert verwendet wird, ist zu beachten, dass

Wenn ein aktualisierbares (veränderbares) Objekt wie eine Liste oder ein Wörterbuch als Standardwert angegeben wird, wird dieses Objekt bei der Definition der Funktion erstellt. Wenn die Funktion dann ohne das entsprechende Argument aufgerufen wird, wird das gleiche Objekt verwendet.

Standardargumentwerte werden bei der Ausführung der Funktionsdefinition von links nach rechts ausgewertet. Das bedeutet, dass der Ausdruck für das Standardargument nur einmal bei der Definition der Funktion ausgewertet wird und bei jedem Aufruf derselbe “berechnete” Wert verwendet wird.
8.7. Function definitions — Python 3.10.2 Documentation

Wenn zum Beispiel eine Funktion definiert wird, die eine Liste oder ein Wörterbuch als Standardargument annimmt und Elemente hinzufügt, und diese Funktion mehrmals ohne dieses Argument aufgerufen wird, werden Elemente wiederholt zu demselben Objekt hinzugefügt.

Beispiel für einen Eintrag.

def func_default_list(l=[0, 1, 2], v=3):
    l.append(v)
    print(l)

func_default_list([0, 0, 0], 100)
# [0, 0, 0, 100]

func_default_list()
# [0, 1, 2, 3]

func_default_list()
# [0, 1, 2, 3, 3]

func_default_list()
# [0, 1, 2, 3, 3, 3]

Beispiel für ein Wörterbuch.

def func_default_dict(d={'default': 0}, k='new', v=100):
    d[k] = v
    print(d)

func_default_dict()
# {'default': 0, 'new': 100}

func_default_dict(k='new2', v=200)
# {'default': 0, 'new': 100, 'new2': 200}

Bei jedem Aufruf der Funktion wird ein neues Objekt erstellt.

def func_default_list_none(l=None, v=3):
    if l is None:
        l = [0, 1, 2]
    l.append(v)
    print(l)

func_default_list_none()
# [0, 1, 2, 3]

func_default_list_none()
# [0, 1, 2, 3]