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

Reply via email to