Hi Peter You make the very good point, that
> subfunction_1 may be written by someone totally different from the author of > main_function, and may even be in a different codebase. For the author of > subfunction_1, it makes no sense to use the "None" approach instead of > python's normal default mechanism (since all arguments here are immutables). Good point. To rephrase, what should we do if we want to use a third party or legacy function, which begins === def fn(a=1, b=2, c=3): # function body === We can solve this by defining a function decorator. Suppose we have a function fix_it, whose argument and return value are both functions. The basic specification of fix_it is that --- fixed_fn = fix_it(fn) --- is in practice equivalent to --- def fixed_fn(a=None, b=None, c=None): if a is None: a = 1 if b is None: b = 2 if c is None: c = 3 # function body for fn # or if you prefer return fn(a, b, c) --- An aside. We can code fix_it by using https://docs.python.org/3/library/inspect.html === >>> import inspect >>> def fn(a=1, b=2, c=3): pass ... >>> str(inspect.signature(fn)) '(a=1, b=2, c=3)' === You could also use with new code, like so: --- @fix_it def fn(a=1, b=2, c=3): # function body --- I think this helps solve your problem. Is there, Peter, anything else that would be left to do (except, of course, write the fix_it function). Thank you again for your problem and comments. -- Jonathan _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/