V jazyce Python lze seznamy (pole), tuply a slovníky rozbalit (rozbalit) a jejich příslušné prvky předat společně jako argumenty funkce.
Při volání funkce zadejte argument pomocí * pro seznamy a tuply a ** pro slovníky. Všimněte si počtu hvězdiček *.
Zde jsou popsány následující podrobnosti.
- Rozbalit (rozbalit) seznam nebo tuple pomocí * (jedna hvězdička)
- Pro funkce s výchozími argumenty
- Pro funkce s proměnnou délkou argumentů
- Rozbalit (rozbalit) slovník pomocí ** (dvě hvězdičky)
- Pro funkce s výchozími argumenty
- Pro funkce s proměnnou délkou argumentů
Základní použití funkcí Pythonu, výchozí argumenty a argumenty proměnné délky s *,** při definování funkcí naleznete v následujícím článku.
- SOUVISEJÍCÍ:Jak používat a zaznamenávat výchozí argumenty ve funkcích Pythonu
- SOUVISEJÍCÍ:Jak používat argumenty s proměnnou délkou v jazyce Python(
*args
,**kwargs
)
Rozbalit (rozbalit) seznam nebo tuple pomocí * (jedna hvězdička)
Pokud je jako argument zadán seznam nebo tuple s *, je rozbalen a každý prvek je předán jako 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
Následující vysvětlení se týká seznamu, ale totéž platí i pro tuple.
Pokud se počet prvků neshoduje s počtem argumentů, dojde k chybě 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
Pro funkce s výchozími argumenty
Pokud je nastaven výchozí argument, použije se v případě nedostatečného počtu prvků. Pokud je počet prvků příliš velký, dojde k chybě 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
Pro funkce s proměnnou délkou argumentů
Pokud je nastaven argument s proměnnou délkou, jsou všechny prvky za prvkem pro poziční argument předány argumentu s proměnnou délkou.
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')
Rozbalit (rozbalit) slovník pomocí ** (dvě hvězdičky)
Pokud je jako argument zadán slovník dict s **, jsou klíče prvků expandovány jako jména argumentů a hodnoty jako hodnoty argumentů a každý z nich je předán jako 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
Pokud neexistuje žádný klíč, který by odpovídal názvu argumentu, nebo existuje klíč, který neodpovídá, dojde k chybě 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'
Pro funkce s výchozími argumenty
Obrázek, ve kterém se aktualizují pouze hodnoty názvů argumentů, které odpovídají klíčům ve slovníku.
Klíč, který neodpovídá názvu argumentu, způ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'
Pro funkce s proměnnou délkou argumentů
Pokud jsou nastaveny argumenty s proměnnou délkou, je do argumentu s proměnnou délkou předán jakýkoli prvek s jiným klíčem, než je název argumentu zadaný jako argument.
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'}