Duncan Booth wrote:
<snip>
Consider languages where you can easily write a swap function (or any other
function that updates its arguments). e.g. consider C or C#.
For C your function must take pointers to the variables, so when you call
swap you have to make this explicit by taking the address of each variable:
foo(&x, &y);
For C# the function takes references to the variables. Again you have to
also make this explicit at the point of call by prefixing the argument with
'ref':
foo(ref x, ref y);
Python is really no different: if you want a function to rebind its
arguments you have to make that explicit at the point of call. The only
difference is that in Python you make the rebinding explicit by assigning
to the names:
x, y = foo(x, y)
I don't disagree with the overall point, but C has references (or at
least C++ does, I don't think I've written any pure C code since 1992).
If the function is declared to take references, the caller doesn't do a
thing differently.
void foo(int &a, int &b);
is called by foo(x, y), and the function may indeed swap the arguments.
If I recall correctly, pascal is the same way. The called function
declares byref, and the caller doesn't do anything differently.
DaveA
--
http://mail.python.org/mailman/listinfo/python-list