Они должны быть как объявлены, так и вызваны в указанном порядке, то есть сигнатура функции должна быть * args, ** kwargs и вызываться в таком порядке.
Ответ 3
Если позволите, код Skurmedel предназначен для python 2; чтобы адаптировать его к python 3, измените iteritems на items и добавьте круглые скобки на print. Это может помешать новичкам вроде меня натыкаться на: AttributeError: 'dict' object has no attribute 'iteritems' и искать в другом месте (например, ошибка “ Объект 'dict' не имеет атрибута 'iteritems' ” при попытке использовать write_shp() NetworkX), почему это происходит.
defmyfunc(**kwargs): for k,v in kwargs.items(): print("%s = %s" % (k, v))
myfunc(abc=123, efh=456) # abc = 123 # efh = 456
и:
defmyfunc2(*args, **kwargs): for a in args: print(a) for k,v in kwargs.items(): print("%s = %s" % (k, v))
Иногда вы не хотите указывать количество аргументов и хотите использовать для них ключи (компилятор будет жаловаться, если один аргумент, переданный в словаре, не используется в методе).
defmanyArgs1(args): print args.a, args.b #note args.c is not used here
defmanyArgs2(args): print args.c #note args.b and .c are not used here