Параметры метода/функции Python, начинающиеся со звездочки и двойной звездочки

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

Пример:

def method(self, *links, **locks):
    #some foo
    #some bar
    return

Я знаю, что мог бы искать документацию, но я понятия не имею, что искать.

Ответ 1

Формы *args и **keywordargs используются для передачи списков аргументов и словарей аргументов, соответственно. Поэтому, если бы у меня была такая функция:

def printlist(*args):
    for x in args:
        print(x)

Я мог бы назвать это следующим образом:

printlist(1, 2, 3, 4, 5)  # or as many more arguments as I'd like

Для этого

def printdict(**kwargs):
    print(repr(kwargs))

printdict(john=10, jill=12, david=15)

*args ведет себя как список, а **keywordargs ведет себя как словарь, но вам не нужно явно передавать функции list или dict в функцию.

Подробнее см. .