- ru
- Language: en
- Documentation version: latest
Аргументы переменной длины
Иногда необходимо сделать так, чтобы функция принимала не фиксированное количество аргументов, а любое. Для такого случая в Python можно создавать функцию со специальным параметром, который принимает аргументы переменной длины. Такой параметр может быть как ключевым, так и позиционным.
Note
Даже если вы не будете использовать этот прием в своих скриптах, есть большая вероятность, что вы встретите его в чужом коде.
Позиционные аргументы переменной длины
Параметр, который принимает позиционные аргументы переменной длины,
создается добавлением перед именем параметра звездочки. Имя параметра
может быть любым, но по договоренности чаще всего используют имя
*args
Пример функции:
In [1]: def sum_arg(a, *args):
....: print(a, args)
....: return a + sum(args)
....:
Функция sum_arg создана с двумя параметрами:
параметр
a
если передается как позиционный аргумент, должен идти первым
если передается как ключевой аргумент, то порядок не важен
параметр
*args
- ожидает аргументы переменной длинысюда попадут все остальные аргументы в виде кортежа
эти аргументы могут отсутствовать
Вызов функции с разным количеством аргументов:
In [2]: sum_arg(1,10,20,30)
1 (10, 20, 30)
Out[2]: 61
In [3]: sum_arg(1,10)
1 (10,)
Out[3]: 11
In [4]: sum_arg(1)
1 ()
Out[4]: 1
Можно создать и такую функцию:
In [5]: def sum_arg(*args):
....: print(args)
....: return sum(args)
....:
In [6]: sum_arg(1, 10, 20, 30)
(1, 10, 20, 30)
Out[6]: 61
In [7]: sum_arg()
()
Out[7]: 0
Ключевые аргументы переменной длины
Параметр, который принимает ключевые аргументы переменной длины,
создается добавлением перед именем параметра двух звездочек. Имя
параметра может быть любым, но, по договоренности, чаще всего,
используют имя **kwargs
(от keyword arguments).
Пример функции:
In [8]: def sum_arg(a,**kwargs):
....: print(a, kwargs)
....: return a + sum(kwargs.values())
....:
Функция sum_arg создана с двумя параметрами:
параметр
a
если передается как позиционный аргумент, должен идти первым
если передается как ключевой аргумент, то порядок не важен
параметр
**kwargs
- ожидает ключевые аргументы переменной длинысюда попадут все остальные ключевые аргументы в виде словаря
эти аргументы могут отсутствовать
Вызов функции с разным количеством ключевых аргументов:
In [9]: sum_arg(a=10, b=10, c=20, d=30)
10 {'c': 20, 'b': 10, 'd': 30}
Out[9]: 70
In [10]: sum_arg(b=10, c=20, d=30, a=10)
10 {'c': 20, 'b': 10, 'd': 30}
Out[10]: 70