def foo2(*args, **kwargs):
    kwargs['bar'] = kwargs.get('bar', 'foo')
print(args, kwargs)
foo2(1, 2, 3, bar='foo')
foo2(1, 2, 3, bar='notfoo')
foo2(1, 2, 3)
Python пытается поместить аргументы ключевого слова после * args