Python предоставляет два оператора распаковки: * для итерируемых объектов и ** для словарей. Оба позволяют разворачивать коллекции при вызове функций или определении параметров.
* (распаковка итерируемых объектов)Оператор * распаковывает любой итерируемый объект (списки, кортежи, множества) в позиционные аргументы.
numbers = [1, 2, 3]
print(*numbers) # Эквивалентно: print(1, 2, 3)
Он также используется в определениях функций для приёма переменного количества позиционных аргументов:
def total(*args):
return sum(args)
total(1, 2, 3) # args = (1, 2, 3)
** (распаковка словаря)Оператор ** распаковывает словарь в именованные аргументы.
params = {'a': 1, 'b': 2}
func(**params) # Эквивалентно: func(a=1, b=2)
Он также используется в определениях функций для приёма переменного количества именованных аргументов:
def display(**kwargs):
print(kwargs)
display(name='Alice', age=30) # kwargs = {'name': 'Alice', 'age': 30}
* работает с любым итерируемым объектом и соответствует позиционным аргументам** работает только со словарями и соответствует именованным аргументам[*list1, *list2] или {**dict1, **dict2}| Оператор | Входные данные | Соответствует |
|---|---|---|
* | Любой итерируемый объект | Позиционные аргументы |
** | Словарь | Именованные аргументы |
Оператор * может распаковывать любой iterable, включая списки, кортежи и множества, в позиционные аргументы, а оператор ** работает исключительно со словарями, распаковывая их в именованные аргументы.
Новый — ещё не проверен сообществом
Вы