Операторы *
и **
используются в двух разных ситуациях.
def save_name_for(self, *args, **kwargs):
используется для обозначения произвольного числа аргументов positional или keyword, соответственно. Следует помнить, что внутри функции args
будет кортеж, а kwargs
будет dict. args = (1, 2)
kwargs = {'last': 'Doe', 'first': 'John'}
self.save_name_for(*args, **kwargs)
*
и **
действуют как операторы распаковки . args
должен быть итерируемым, а kwargs
должен быть dict-like. Элементы в args
будут распакованы и отправлены функции как позиционные аргументы, а пары ключ / значение в kwargs
будут отправлены функции как аргументы ключевого слова. Таким образом, self.save_name_for(*args, **kwargs)
эквивалентно self.save_name_for(1, 2, last='Doe', first='John')
См. Также блог saltycrane для объяснения с примерами.