Erweitern und Übergeben von Listen, Tupeln und Wörterbüchern als Funktionsargumente in Python

Geschäft

In Python können Listen (Arrays), Tupel und Dictionaries expandiert (ausgepackt) und ihre jeweiligen Elemente zusammen als Funktionsargumente übergeben werden.

Wenn Sie eine Funktion aufrufen, geben Sie das Argument mit * für Listen und Tupel und ** für Wörterbücher an. Beachten Sie die Anzahl der Sternchen *.

Die folgenden Details werden hier beschrieben.

  • Erweitern (Entpacken) einer Liste oder eines Tupels mit * (ein Sternchen)
    • Für Funktionen mit Standardargumenten
    • Für Funktionen mit Argumenten variabler Länge
  • Erweitern (Entpacken) des Wörterbuchs mit ** (zwei Sternchen)
    • Für Funktionen mit Standardargumenten
    • Für Funktionen mit Argumenten variabler Länge

Siehe den folgenden Artikel über die grundlegende Verwendung von Python-Funktionen, Standardargumente und Argumente mit variabler Länge (*,**) bei der Definition von Funktionen.

Erweitern (Entpacken) einer Liste oder eines Tupels mit * (ein Sternchen)

Wenn eine Liste oder ein Tupel als Argument mit * angegeben wird, wird sie/es erweitert und jedes Element wird als separates Argument übergeben.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

l = ['one', 'two', 'three']

func(*l)
# arg1 = one
# arg2 = two
# arg3 = three

func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three

t = ('one', 'two', 'three')

func(*t)
# arg1 = one
# arg2 = two
# arg3 = three

func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three

Die folgende Erklärung bezieht sich auf eine Liste, aber das Gleiche gilt für ein Tupel.

Wenn die Anzahl der Elemente nicht mit der Anzahl der Argumente übereinstimmt, tritt ein TypeError-Fehler auf.

# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given

Für Funktionen mit Standardargumenten

Wenn ein Standardargument festgelegt ist, wird das Standardargument verwendet, wenn die Anzahl der Elemente nicht ausreicht. Wenn die Anzahl der Elemente zu groß ist, tritt ein TypeError-Fehler auf.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3

func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3

# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given

Für Funktionen mit Argumenten variabler Länge

Wenn ein Argument mit variabler Länge gesetzt ist, werden alle Elemente nach dem Element für das Positionsargument an das Argument mit variabler Länge übergeben.

def func_args(arg1, *args):
    print('arg1 =', arg1)
    print('args =', args)

func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)

func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')

func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')

Erweitern (Entpacken) des Wörterbuchs mit ** (zwei Sternchen)

Wenn ein Dictionary-Dict als Argument mit ** angegeben wird, werden die Elementschlüssel als Argumentnamen und die Werte als Argumentwerte expandiert und jeweils als eigenes Argument übergeben.

def func(arg1, arg2, arg3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}

func(**d)
# arg1 = one
# arg2 = two
# arg3 = three

func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three

Wenn es keinen Schlüssel gibt, der mit dem Argumentnamen übereinstimmt, oder wenn es einen Schlüssel gibt, der nicht übereinstimmt, wird ein TypeError-Fehler ausgegeben.

# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'

# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'

Für Funktionen mit Standardargumenten

Bild, bei dem nur die Werte von Argumentnamen, die mit den Schlüsseln im Wörterbuch übereinstimmen, aktualisiert werden.

Ein Schlüssel, der nicht mit dem Argumentnamen übereinstimmt, führt zu einem TypeError-Fehler.

def func_default(arg1=1, arg2=2, arg3=3):
    print('arg1 =', arg1)
    print('arg2 =', arg2)
    print('arg3 =', arg3)

func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3

func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three

# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'

Für Funktionen mit Argumenten variabler Länge

Wenn Argumente mit variabler Länge festgelegt sind, wird jedes Element mit einem anderen Schlüssel als dem als Argument angegebenen Namen an das Argument mit variabler Länge übergeben.

def func_kwargs(arg1, **kwargs):
    print('arg1 =', arg1)
    print('kwargs =', kwargs)

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}

func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}

func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}