Stephen Hansen wrote:
I have a feeling this might start one of those uber-massive "pass by value / reference / name / object / AIEE" threads where everyone goes around in massive circles explaining how Python uses one or another parameter passing paradigm and why everyone else is wrong... but... :)
Believe me, I don't want that to happen!
The thing is, parameter values are NOT supplied to a function when it is called.

When you call a function, there's no creation or copying of any values of any kind. The objects you pass in are passed in and the function receives those exact same objects. Within the function a local name is made which binds to an existing object that is specified when it is called-- or if a default is provided, that. In all cases these objects already exist before the call happens.
This is the kind of explanation I was looking for in the "why are default values shared" writeup.

Despite the fact that using mutable objects as default arguments is a frequent source of quirked-eyebrows and head-scratching for those new to Python, to do anything else would be weirdly magical. You'd basically have to go and call copy() on any default arguments specified in the function; at which point why are you copying those and not the other arguments?
The interpreter *could* take the extra trouble to do that with default arguments, because many users seems to expect that behavior. But I now understand how the decision *not* to treat default arguments as special cases produces the actual behavior. Many thanks, Stephen.

-John

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to