У Питхон-у, листе (низови), тупле и речници се могу проширити (распаковати) и њихови одговарајући елементи могу бити прослеђени заједно као аргументи функције.
Када позивате функцију, наведите аргумент са * за листе и торке и ** за речнике. Обратите пажњу на број звездица *.
Овде су описани следећи детаљи.
- Проширите (отпакујте) листу или тупле са * (једна звездица)
- За функције са подразумеваним аргументима
- За функције са аргументима променљиве дужине
- Проширите (отпакујте) речник са ** (две звездице)
- За функције са подразумеваним аргументима
- За функције са аргументима променљиве дужине
Погледајте следећи чланак за основну употребу Питхон функција, подразумеваних аргумената и аргумената променљиве дужине са *,** када дефинишете функције.
- ПОВЕЗАН:Како користити и бележити подразумеване аргументе у Питхон функцијама
- ПОВЕЗАН:Како користити аргументе променљиве дужине у Питхон-у(
*args
,**kwargs
)
Проширите (отпакујте) листу или тупле са * (једна звездица)
Када се листа или тупле наведе као аргумент са *, он се проширује и сваки елемент се прослеђује као посебан аргумент.
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
Следеће објашњење је за листу, али исто важи и за тупле.
Ако се број елемената не поклапа са бројем аргумената, долази до грешке ТипеЕррор.
# 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
За функције са подразумеваним аргументима
Ако је постављен подразумевани аргумент, подразумевани аргумент се користи ако је број елемената недовољан. Ако је број елемената превелик, долази до грешке ТипеЕррор.
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
За функције са аргументима променљиве дужине
Ако је постављен аргумент променљиве дужине, сви елементи после елемента за позициони аргумент се прослеђују аргументу променљиве дужине.
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')
Проширите (отпакујте) речник са ** (две звездице)
Када је речник дицт наведен као аргумент са **, кључеви елемената се проширују као имена аргумената и вредности као вредности аргумената, а сваки се прослеђује као посебан аргумент.
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
Ако не постоји кључ који одговара имену аргумента или постоји кључ који се не подудара, доћи ће до грешке ТипеЕррор.
# 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'
За функције са подразумеваним аргументима
Слика на којој се ажурирају само вредности имена аргумената који одговарају кључевима у речнику.
Кључ који се не подудара са именом аргумента довешће до грешке ТипеЕррор.
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'
За функције са аргументима променљиве дужине
Ако су постављени аргументи променљиве дужине, било који елемент са кључем који није наведен као аргумент се прослеђује аргументу променљиве дужине.
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'}