Сервисы
Назад

Вопрос:

распаковка(*, **), args, kwargs

Как часто спрашивают: Часто

Кто предложил: ALittleMoron


Ответ:

Распаковка используется в разных условиях при использовании последовательностей. Иногда их можно использовать для пересоздания структур данных. Иногда можно передать неопределенное количество аргументов в функции или экземпляры классов.

args - это конвенционально принятое слово, использующееся в функциях в качестве параметра, куда передается неопределённое число непозиционных аргументов. Непозиционный аргумент - тот, который передается без знака =. Можно заменить позиционным параметром-последовательностью.

kwargs - такое же конвенционально принятое слово, использующееся в функциях в качестве параметра, куда передается неопределённое число уже позиционных аргументов. Позиционные - те аргументы, которые передаются через =.

args и kwargs - не зарезервированные слова и их можно назвать как угодно. Главное, чтобы для непозиционных аргументов стояла одна звездочка *, а для позиционных - две звёздочки **. Пример такой функции:

def foo (a, *b, **c):
    ...

Объяснение ответа на собеседовании:

Вопрос на самом деле с подвохом. Синтаксис * и ** может использоваться как для распаковки, так и для передачи непозиционных и позиционных аргументов соответственно.

Основная сложность для начинающих разработчиков - это понять их отличие. Знание таких отличий помогает понять, что кандидат понимает основы и имеет общее представление о функциях в Python.


Внешние ресурсы: