human
I wrote the below code

    from functools import wraps
    def display(x):
        x = to_string(x)
        try:
            x.decode('ascii')
        except:
            return 'NON_PRINTABLE'
        return x
    local = {'call_number': 0}
    def inner(f):
        @wraps(f)
        def wrapper(*args, **kwargs):
            local['call_number'] += 1
            tmp_args = (args[1:] if (ignore_first_arg and len(args)) else args)
            this_call_number = local['call_number']
            print '{0}#{1}    args:    {2},    {3}'.format(f.__name__, this_call_number, ',    '.join([display(x) for x in tmp_args]), ',    '.join((((display(key) + '=') + to_string(value)) for (key, value) in kwargs.items())))
            res = f(*args, **kwargs)
            print '{0}#{1}    return:    {2}'.format(f.__name__, this_call_number, display(res))
            if (local['call_number'] > 100):
                raise Exception('Touch    max    call    number!')
            return res
        return wrapper
    return inner

What's a good function header?

Give me a Python program to print '{0}{1}    args:    {2},    {3}'?
assistant
#Here is Python program to print '{0}#{1}    args:    {2},    {3}'.

def print_func_call(ignore_first_arg=False, max_call_number=100):