U Pythonu se popisi (nizovi), tuple i rječnici mogu proširiti (raspakirati) i njihovi odgovarajući elementi mogu se proslijediti zajedno kao argumenti funkcije.
Prilikom pozivanja funkcije navedite argument s * za popise i torke i ** za rječnike. Obratite pažnju na broj zvjezdica *.
Ovdje su opisani sljedeći detalji.
- Proširite (otpakirajte) popis ili tuple sa * (jedna zvjezdica)
- Za funkcije sa zadanim argumentima
- Za funkcije s argumentima promjenjive duljine
- Proširite (otpakirajte) rječnik s ** (dvije zvjezdice)
- Za funkcije sa zadanim argumentima
- Za funkcije s argumentima promjenjive duljine
Pogledajte sljedeći članak za osnovnu upotrebu Python funkcija, zadanih argumenata i argumenata promjenjive duljine sa *,** prilikom definiranja funkcija.
- POVEZANO:Kako koristiti i zabilježiti zadane argumente u Python funkcijama
- POVEZANO:Kako koristiti argumente promjenjive duljine u Pythonu(
*args
,**kwargs
)
Proširite (otpakirajte) popis ili tuple sa * (jedna zvjezdica)
Kada je popis ili tuple specificiran kao argument sa *, on se proširuje i svaki element se prosljeđuje kao poseban argument.
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
Sljedeće objašnjenje je za popis, ali isto vrijedi i za tuple.
Ako broj elemenata ne odgovara broju argumenata, dolazi do pogreške TypeError.
# 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
Za funkcije sa zadanim argumentima
Ako je postavljen zadani argument, zadani se argument koristi ako je broj elemenata nedovoljan. Ako je broj elemenata prevelik, dolazi do pogreške TypeError.
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
Za funkcije s argumentima promjenjive duljine
Ako je postavljen argument promjenjive duljine, svi elementi nakon elementa za pozicijski argument prosljeđuju se argumentu varijabilne duljine.
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')
Proširite (otpakirajte) rječnik s ** (dvije zvjezdice)
Kada je rječnik dict naveden kao argument s **, ključevi elementa se proširuju kao imena argumenata i vrijednosti kao vrijednosti argumenata, a svaki se prosljeđuje kao zasebni argument.
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
Ako ne postoji ključ koji odgovara imenu argumenta ili postoji ključ koji se ne podudara, pojavit će se pogreška TypeError.
# 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'
Za funkcije sa zadanim argumentima
Slika u kojoj se ažuriraju samo vrijednosti naziva argumenata koji odgovaraju ključevima u rječniku.
Ključ koji ne odgovara imenu argumenta rezultirat će pogreškom 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'
Za funkcije s argumentima promjenjive duljine
Ako su postavljeni argumenti varijabilne duljine, bilo koji element s ključem koji nije naveden kao argument prosljeđuje se argumentu varijabilne duljine.
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'}