Lijsten, tupels en woordenboeken uitbreiden en doorgeven als functieargumenten in Python

Bedrijf

In Python kunnen lijsten (arrays), tuples en dictionaries worden geëxpandeerd (uitgepakt) en hun respectieve elementen kunnen samen als functieargumenten worden doorgegeven.

Wanneer u een functie aanroept, specificeert u het argument met * voor lijsten en tupels en ** voor woordenboeken. Let op het aantal sterretjes *.

De volgende details worden hier beschreven.

  • Een lijst of tupel uitbreiden (uitpakken) met * (een sterretje)
    • Voor functies met standaardargumenten
    • Voor functies met argumenten van variabele lengte
  • Woordenboek uitbreiden (uitpakken) met ** (twee sterretjes)
    • Voor functies met standaardargumenten
    • Voor functies met argumenten van variabele lengte

Zie het volgende artikel voor basisgebruik van Python functies, standaard argumenten, en variabele lengte argumenten met *,** bij het definiëren van functies.

Een lijst of tupel uitbreiden (uitpakken) met * (een sterretje)

Wanneer een lijst of tupel als argument wordt opgegeven met *, wordt deze uitgebreid en wordt elk element als een afzonderlijk argument doorgegeven.

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

De volgende uitleg is voor een lijst, maar hetzelfde geldt voor een tuple.

Indien het aantal elementen niet overeenstemt met het aantal argumenten, treedt een TypeError-fout op.

# 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

Voor functies met standaardargumenten

Als een standaardargument is ingesteld, wordt het standaardargument gebruikt als het aantal elementen onvoldoende is. Indien het aantal elementen te groot is, treedt een TypeError-fout op.

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

Voor functies met argumenten van variabele lengte

Als een variabele-lengte argument is ingesteld, worden alle elementen na het element voor het positionele argument doorgegeven aan het variabele-lengte argument.

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')

Woordenboek uitbreiden (uitpakken) met ** (twee sterretjes)

Wanneer een dictionary dict als argument wordt opgegeven met **, worden de element-sleutels geëxpandeerd als argumentnamen en de waarden als argumentwaarden, en elk wordt als een afzonderlijk argument doorgegeven.

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

Indien er geen sleutel is die overeenstemt met de naam van het argument of indien er een sleutel is die niet overeenstemt, zal er een TypeError-foutmelding verschijnen.

# 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'

Voor functies met standaardargumenten

Afbeelding waarin alleen de waarden van argumentnamen die overeenkomen met de sleutels in het woordenboek worden bijgewerkt.

Een sleutel die niet overeenkomt met de naam van het argument zal een TypeError-foutmelding opleveren.

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'

Voor functies met argumenten van variabele lengte

Als argumenten met variabele lengte zijn ingesteld, wordt elk element met een andere sleutel dan de argumentnaam die als argument is opgegeven, doorgegeven aan het argument met variabele lengte.

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'}
Copied title and URL