Вопрос:
распаковка(*, **), args, kwargs
Как часто спрашивают: Часто
Кто предложил: ALittleMoron
Ответ:
Распаковка используется в разных условиях при использовании последовательностей. Иногда их можно использовать для пересоздания структур данных. Иногда можно передать неопределенное количество аргументов в функции или экземпляры классов.
args - это конвенционально принятое слово, использующееся в функциях в качестве параметра, куда передается неопределённое число непозиционных аргументов. Непозиционный аргумент - тот, который передается без знака =. Можно заменить позиционным параметром-последовательностью.
kwargs - такое же конвенционально принятое слово, использующееся в функциях в качестве параметра, куда передается неопределённое число уже позиционных аргументов. Позиционные - те аргументы, которые передаются через =.
args и kwargs - не зарезервированные слова и их можно назвать как угодно. Главное, чтобы для непозиционных аргументов стояла одна звездочка *, а для позиционных - две звёздочки **. Пример такой функции:
def foo (a, *b, **c):
...
Объяснение ответа на собеседовании:
Вопрос на самом деле с подвохом. Синтаксис * и ** может использоваться как для распаковки, так и для передачи непозиционных и позиционных аргументов соответственно.
Основная сложность для начинающих разработчиков - это понять их отличие. Знание таких отличий помогает понять, что кандидат понимает основы и имеет общее представление о функциях в Python.