Steven D'Aprano wrote:
But the name isn't the argument. The argument to a function is an object
The *formal* argument *is* a name, and that's what the phrase "changes to the arguments within the called procedure" is talking about.
Take a function foo that takes one formal parameter x. Pass an actual argument y to it. The argument is the object currently bound to y, not the name y. Nothing inside foo can rebind the name y because foo doesn't see the name y, it sees the object.
More to the point, it sees the *name x* rather than the name y, and rebinding the name x doesn't change the binding of name y. Therefore, the name y has been passed by value, not by reference.
[1] You can pass a string representing the name to a function, which can then use some combination of setattr, globals(), exec etc to work with the name represented by that string.
This would be the Python equivalent of the strategy used in C to emulate call-by-reference -- and it's needed for the same reason, i.e. the language itself only provides call-by-value. So you pass a value that you can manually dereference to get the same effect. -- Greg -- http://mail.python.org/mailman/listinfo/python-list