V jazyku Python možno zoznamy (polia), kôpky a slovníky rozbaľovať (rozbaľovať) a ich príslušné prvky možno odovzdávať spoločne ako argumenty funkcie.
Pri volaní funkcie zadajte argument pomocou * pre zoznamy a kôpky a ** pre slovníky. Všimnite si počet hviezdičiek *.
Sú tu opísané tieto podrobnosti.
- Rozbaľte (rozbaľte) zoznam alebo tuple pomocou * (jedna hviezdička)
- Pre funkcie s predvolenými argumentmi
- Pre funkcie s premenlivou dĺžkou argumentov
- Rozbaľte (rozbaľte) slovník pomocou ** (dve hviezdičky)
- Pre funkcie s predvolenými argumentmi
- Pre funkcie s premenlivou dĺžkou argumentov
Základné použitie funkcií Pythonu, predvolených argumentov a argumentov s premennou dĺžkou pomocou *,** pri definovaní funkcií nájdete v nasledujúcom článku.
- SÚVISIACE:Ako používať a zaznamenávať predvolené argumenty vo funkciách Pythonu
- SÚVISIACE:Ako používať argumenty s premennou dĺžkou v jazyku Python(
*args
,**kwargs
)
Rozbaľte (rozbaľte) zoznam alebo tuple pomocou * (jedna hviezdička)
Ak je zoznam alebo tuple zadaný ako argument pomocou *, je rozšírený a každý prvok je odovzdaný ako samostatný 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
Nasledujúce vysvetlenie sa týka zoznamu, ale to isté platí aj pre tuple.
Ak sa počet prvkov nezhoduje s počtom argumentov, nastane chyba 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
Pre funkcie s predvolenými argumentmi
Ak je nastavený predvolený argument, použije sa predvolený argument, ak je počet prvkov nedostatočný. Ak je počet prvkov príliš veľký, vyskytne sa chyba 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
Pre funkcie s premenlivou dĺžkou argumentov
Ak je nastavený argument s premenlivou dĺžkou, všetky prvky za prvkom pre pozičný argument sa odovzdajú argumentu s premenlivou dĺžkou.
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')
Rozbaľte (rozbaľte) slovník pomocou ** (dve hviezdičky)
Ak je slovník dict zadaný ako argument s príponou **, kľúče prvkov sú expandované ako názvy argumentov a hodnoty ako hodnoty argumentov a každý z nich je odovzdaný ako samostatný 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
Ak neexistuje kľúč, ktorý by sa zhodoval s názvom argumentu, alebo existuje kľúč, ktorý sa nezhoduje, vznikne chyba 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'
Pre funkcie s predvolenými argumentmi
Obrázok, v ktorom sa aktualizujú len hodnoty názvov argumentov, ktoré zodpovedajú kľúčom v slovníku.
Kľúč, ktorý sa nezhoduje s názvom argumentu, spôsobí chybu 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'
Pre funkcie s premenlivou dĺžkou argumentov
Ak sú nastavené argumenty s premenlivou dĺžkou, každý prvok s iným kľúčom, ako je názov argumentu uvedený ako argument, sa odovzdá argumentu s premenlivou dĺžkou.
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'}