|
|
|
|
|
by tasuki
2 days ago
|
|
> It's just because the `def xxx()` part gets executed once when the module is loaded so the default arguments get created then. I understand as much. > It's not really a design choice. That explains it then. Pretty damning though, no? |
|
My assumption just makes sense when all the function really gets is "a list of positional arguments and a dict of keyword arguments" (ala `*args, **kwargs`) that is "deconstructed" to the named variables on the function side. Then the function never gets the default value passed and fills it in before executing the body. Therefore it needs some value to assign and that value is determined when parsing the function definition.
So effectively I want to say that I think instead of the default value being passed at the call site (which is how C++ for example does it by inserting the expression inplace of a specified value) it is filled in by the function before executing the body.
In the end this is just a guess, but that is my working hypothesis.