Að stækka og senda lista, túlla og orðabækur sem fallrök í Python

Viðskipti

Í Python er hægt að stækka lista (fylki), túlla og orðabækur (pakka upp) og senda viðkomandi þætti þeirra saman sem fallrök.

Þegar fall er kallað skaltu tilgreina rökin með * fyrir lista og túlla og ** fyrir orðabækur. Athugaðu fjölda stjörnur *.

Eftirfarandi smáatriðum er lýst hér.

  • Stækkaðu (afpakkaðu) lista eða töflu með * (ein stjörnu)
    • Fyrir aðgerðir með sjálfgefnum rökum
    • Fyrir aðgerðir með breytileg lengd rök
  • Stækka (pakka upp) orðabók með ** (tvær stjörnur)
    • Fyrir aðgerðir með sjálfgefnum rökum
    • Fyrir aðgerðir með breytileg lengd rök

Sjá eftirfarandi grein fyrir grunnnotkun á Python föllum, sjálfgefna frumbreytur og breytileg lengd rök með *,** þegar föll eru skilgreind.

Stækkaðu (afpakkaðu) lista eða töflu með * (ein stjörnu)

Þegar listi eða tuple er tilgreindur sem rökstuðningur með *, er hann stækkaður og hver þáttur er fluttur sem sérstök rök.

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

Eftirfarandi skýring er fyrir lista, en það sama á við um tupel.

Ef fjöldi þátta passar ekki við fjölda frumgreina kemur TypeError villa.

# 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

Fyrir aðgerðir með sjálfgefnum rökum

Ef sjálfgefin frumbreyta er stillt eru sjálfgefin rök notuð ef fjöldi þátta er ófullnægjandi. Ef fjöldi þátta er of stór kemur TypeError villa.

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

Fyrir aðgerðir með breytileg lengd rök

Ef breytileg lengd rifrildi er stillt, eru allir þættir á eftir staki fyrir staðsetningarriðil sendar til breytilegrar lengdar breytu.

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

Stækka (pakka upp) orðabók með ** (tvær stjörnur)

Þegar orðabókarorð er tilgreint sem rök með **, þá eru frumefnislyklar stækkaðir sem frumbreytanöfn og gildi sem rökbreytugildi og hver og einn er send sem aðskilin frumbreyta.

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

Ef það er enginn lykill sem passar við heiti röksemdafærslunnar eða það er lykill sem passar ekki, þá kemur TypeError villa.

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

Fyrir aðgerðir með sjálfgefnum rökum

Mynd þar sem aðeins gildi röksemdaheita sem passa við lyklana í orðabókinni eru uppfærð.

Lykill sem passar ekki við heiti röksemda mun leiða til villu í TypeError.

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'

Fyrir aðgerðir með breytileg lengd rök

Ef frumbreytur með breytilegri lengd eru stilltar, er hvaða þáttur sem er með annan lykil en nafnið sem tilgreint er sem frumbreytan send yfir í frumbreytuna með breytilegri lengd.

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