Каково назначение операторов `*` и `**` в Python?

Ответ

В Python символы * (звездочка) и ** (две звездочки) используются для двух основных целей: распаковка (unpacking) и сборка (packing) аргументов в функциях.

1. Распаковка аргументов (Unpacking)

Это позволяет передавать элементы итерируемых объектов или словарей как отдельные аргументы в функцию.

  • *`` (одна звездочка): Распаковывает итерируемые объекты (списки, кортежи, строки) в позиционные аргументы**.

    • Применение: Передача коллекции элементов в функцию, которая ожидает несколько отдельных позиционных аргументов. Это удобно, когда количество аргументов известно, но они хранятся в коллекции.
      
      numbers = [1, 2, 3]
      print(*numbers)  # Эквивалентно print(1, 2, 3)

    def sum_three(a, b, c): return a + b + c print(sum_three(*numbers)) # Передает 1, 2, 3 как a, b, c

  • `` (две звездочки): Распаковывает словари в именованные аргументы (ключевые слова)**.

    • Применение: Передача словаря с параметрами в функцию, которая ожидает именованные аргументы. Это полезно для динамической передачи конфигурации или параметров.
      params = {'a': 1, 'b': 2}
      def func(a, b):
      return a + b
      print(func(**params))  # Эквивалентно func(a=1, b=2)

2. Сборка аргументов (Packing)

Это позволяет функции принимать произвольное количество аргументов.

  • *`args`: Собирает все переданные позиционные аргументы** в один кортеж.

    • Применение: Создание функций с переменным числом позиционных аргументов, когда заранее неизвестно, сколько их будет.
  • `kwargs`: Собирает все переданные именованные аргументы** в один словарь.

    • Применение: Создание функций с переменным числом именованных аргументов, что полезно для гибких API или передачи произвольных опций.

*Пример использования `argsиkwargs` в определении функции:

def example_function(*args, **kwargs):
    print("Позиционные аргументы (args):", args)  # Кортеж
    print("Именованные аргументы (kwargs):", kwargs) # Словарь

example_function(1, 2, 3, name="Alice", age=30)
# Вывод:
# Позиционные аргументы (args): (1, 2, 3)
# Именованные аргументы (kwargs): {'name': 'Alice', 'age': 30}

Эти операторы значительно повышают гибкость функций в Python, позволяя им работать с динамическим числом входных данных и создавать более универсальный код.