def my_func(*args, **kwargs):
   print(type(args))
   print(type(kwargs))

my_func()
# <class 'tuple'>
# <class 'dict'>так они пишутся с одной* и с двумя** Важно, что они должны начинаться с одной и двух звездочек соответственно. Каждая из этих конструкций используется для распаковки аргументов соответствующего типа, позволяя вызывать функции со списком аргументов переменной длины, как в случае функции print.
#
# Чтобы правильно обрабатывать *args и **kwargs нужно представлять, чем они являются. А собственно args — это кортеж, а kwargs  — это словарь.
def adder(*nums):
   sum_ = 0
   for n in nums:
      sum_ += n

   return sum_


print(adder())  # 0
print(adder(1))  # 1
print(adder(1, 2))  # 3
print(adder(1, 2, 3))  # 6