Python

Я правильно понимаю, как работает оператор * и ** в Python? (оператор распаковки\упаковки)

Оператор * работает как оператор УПАКОВКИ, только в том случае, когда мы делаем множественное присваивание переменным

Пример:
a, b, *c = 1, 2, 3, 4, 5
Вывод : a = 1, b = 2, c = [3,4,5] (упаковалось)

А как оператор РАСПАКОВКИ, во всех других случаях(передача в функцию, распаковка массива, кортежа, множества)

Пример 1:
def Func(*args), где args - кортеж из параметров, которые мы укажем в Func(), который распаковывается там же внутри и превращает всё в набор параметров

Пример 2:
massiv = [1,2,3,4,365]
print(*massiv)
Вывод: 1 2 3 4 365


Оператор ** используется же только в качестве УПАКОВКИ именованных аргументов функции в виде словаря

Пример:
def Func(**kwargs):
...
Func(a=2, b=99, c='hello')
где kwargs - словарь со значениями:
{a: 2, b: 99, c: 'hello'}
Не так. В заголовке функции - это именно упаковка. Когда мы пишем:
 def fun(*par): ... 
и вызываем:
 fun(1, 2, 3, 4, 5) 
, то в par получаем:
 (1, 2, 3, 4, 5) 
Упаковка в чистом виде.

И даже в твоём собственном примере в kwards получаем упакованный словарь.
Анатолий Смирнов-Скороспешев
Анатолий Смирнов-Скороспешев
57 091
Лучший ответ
Алексей Ленков ** возведение в степень))) я кстати не сразу вкурил за питон, зачем такая дичь
Верно, в примере функции `Func(**kwargs)`, `kwargs` представляет собой словарь, содержащий именованные аргументы и их значения. В данном случае, словарь `kwargs` будет выглядеть следующим образом: `{a: 2, b: 99, c: 'hello'}`. Внутри функции `Func`, вы можете обращаться к значениям аргументов, используя их имена в качестве ключей словаря `kwargs`.
В Python оператор * может использоваться как оператор упаковки и распаковки в зависимости от контекста.

Когда оператор * используется во время присваивания (например, a, b, *c = 1, 2, 3, 4, 5), он работает как оператор упаковки. В этом случае значения, которые не могут быть присвоены в явно указанные переменные, упаковываются в список или кортеж.

Когда оператор * используется при передаче аргументов функции или распаковке последовательностей (например, *args в функции или print(*massiv)), он работает как оператор распаковки. В этом случае значения последовательности (списка, кортежа и т. д.) распаковываются и передаются как отдельные аргументы в функцию или встроенную функцию.

Оператор ** используется только для упаковки именованных аргументов в словарь при передаче их в функцию.

Надеюсь, это помогло вам понять, как работают операторы * и ** в Python.