Finding the instance reference of an object

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Mon Nov 10 20:27:59 EST 2008


On Mon, 10 Nov 2008 23:16:13 +1300, greg wrote:

>>     (CBV) An evaluation strategy where arguments are evaluated before
>>     the function or procedure is entered. Only the values of the
>>     arguments are passed and changes to the arguments within the called
>>     procedure have no effect on the actual arguments as seen by the
>>     caller.
> 
> That hinges on what exactly is meant by "changes to the arguments". In
> Python it can only mean assigning directly to the bare name -- anything
> else isn't changing the argument itself, but something else to which the
> argument refers.

But the name isn't the argument. The argument to a function is an object, 
not a name. You can't write a function in Python that takes a name as an 
argument[1], which would be equivalent to Pascal's "var" parameters.

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. Rebinding (or deleting) the name x 
inside foo does nothing to the object bound to y, or the name y.






[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. But you're still passing an object 
to the function, not a name.


-- 
Steven



More information about the Python-list mailing list