Í 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.
- TENGT:Hvernig á að nota og taka eftir sjálfgefnum rökum í Python aðgerðum
- TENGT:Hvernig á að nota breytileg lengd rök í Python(
*args
,**kwargs
)
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'}