def count_args(f):

    def new(*args, **kwargs):
        kwargs['nargs'] = len(args) + len(kwargs)
return f(*args, **kwargs)
return new

@count_args
def foo(a, optional=42, nargs=1):
    print(nargs)
foo(1)
foo(1, 4)
foo(1, optional=4)
Количество фактических аргументов функции