Motif: *args
и **kwargs
служат заполнителем для аргументов, которые необходимо передать вызову функции
, используя *args
и **kwargs
для вызова функции
def args_kwargs_test(arg1, arg2, arg3):
print "arg1:", arg1
print "arg2:", arg2
print "arg3:", arg3
Теперь мы будем использовать *args
для вызова указанной выше функции
#args can either be a "list" or "tuple"
>>> args = ("two", 3, 5)
>>> args_kwargs_test(*args)
arg1: two arg2: 3 arg3: 5
Теперь, используя **kwargs
для вызова той же функции
#keyword argument "kwargs" has to be a dictionary
>>> kwargs = {"arg3":3, "arg2":'two', "arg1":5}
>>> args_kwargs_test(**kwargs)
arg1: 5 arg2: two arg3: 3
Bottomline: *args
не имеет интеллекта, он просто интерполирует переданные аргументы в параметры (в порядке слева направо), в то время как **kwargs
ведет себя разумно, помещая соответствующее значение @ в требуемое место