У Python списки (масиви), кортежи та словники можна розгортати (розпаковувати), а їхні відповідні елементи можна передавати разом як аргументи функції.
Викликаючи функцію, вкажіть аргумент за допомогою * для списків і кортежів і ** для словників. Зверніть увагу на кількість зірочок *.
Тут описано наступні деталі.
- Розгорніть (розпакуйте) список або кортеж за допомогою * (одна зірочка)
- Для функцій з аргументами за замовчуванням
- Для функцій з аргументами змінної довжини
- Розгорніть (розпакуйте) словник за допомогою ** (дві зірочки)
- Для функцій з аргументами за замовчуванням
- Для функцій з аргументами змінної довжини
Перегляньте наступну статтю, щоб дізнатися про базове використання функцій Python, аргументів за замовчуванням та аргументів змінної довжини з *,** під час визначення функцій.
- ПОВ’ЯЗАНІ:Як використовувати та відзначати аргументи за замовчуванням у функціях Python
- ПОВ’ЯЗАНІ:Як використовувати аргументи змінної довжини в Python(
*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
Наведене нижче пояснення стосується списку, але те саме стосується і кортежу.
Якщо кількість елементів не відповідає кількості аргументів, виникає помилка 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
Для функцій з аргументами за замовчуванням
Якщо встановлено аргумент за замовчуванням, аргумент за замовчуванням використовується, якщо кількість елементів недостатня. Якщо кількість елементів занадто велика, виникає помилка 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
Для функцій з аргументами змінної довжини
Якщо встановлено аргумент змінної довжини, усі елементи після елемента для позиційного аргументу передаються аргументу змінної довжини.
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')
Розгорніть (розпакуйте) словник за допомогою ** (дві зірочки)
Коли словник dict вказується як аргумент з **, ключі елементів розгортаються як імена аргументів, а значення як значення аргументів, і кожен передається як окремий аргумент.
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
Якщо немає ключа, який відповідає імені аргументу, або є ключ, який не відповідає, виникне помилка 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'
Для функцій з аргументами за замовчуванням
Зображення, в якому оновлюються лише значення імен аргументів, які відповідають ключам у словнику.
Ключ, який не відповідає імені аргументу, призведе до помилки 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'
Для функцій з аргументами змінної довжини
Якщо задано аргументи змінної довжини, будь-який елемент з ключем, відмінним від імені аргументу, зазначеного як аргумент, передається до аргументу змінної довжини.
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'}