Pascal Chambon wrote:
I'm surely not original in any way there, but I'd like to put back on the table the matter of "default argument values".
There have been two proposals: 1. Evaluate the expression once, store the result, and copy on each function call. - Expensive. - Nearly always not needed. - Not always possible. 2. Store the expression and evaluate on each function call (your re-proposal). - Expensive. - The result may be different for each function call, and might raise an exception. - This is the job of the suite !!!!!!!!!!!!!!!! - Which is to say, run-time code belongs in the function body, not the header.
And no one seemed to enjoy the possibilities of getting "potentially static variables" this way.
You did not search hard enough.
Static variables are imo a rather bad idea,
So you want to take them away from everyone else. I think *that* is a rather bad idea ;-). No one is forcing you to use them.
On the other hand, when people write "def func(mylist=[]):", they basically DO want a fresh new list at each call,
Maybe, maybe not.
be it given by the caller or the default argument system. So it's really a pity to need tricks like
/ def f(a, L=None): />/ if L is None: />/ L = []
Or don't supply a default arg if that is not what you really want. Putting call time code in the function body is not a trick.
/to get what we want (and if None was also a possible value ?
__none = object() def(par = __none): if par == __none: ... as had been posted each time this question has been asked.
I guess this will mean some overhead during function call,
I absolutely guarantee that this will. Functions calls are expensive. Adding a function call for each default arg (and many functions have more than one) multiplies the calling overhead.
so this might become another issue.
Is and always has been. Terry Jan Reedy