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
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/