[Tutor] beginning to code
Steve D'Aprano
steve+python at pearwood.info
Fri Sep 22 09:30:34 EDT 2017
On Fri, 22 Sep 2017 10:27 pm, Marko Rauhamaa wrote:
> ram at zedat.fu-berlin.de (Stefan Ram):
>
>> Marko Rauhamaa <marko at pacujo.net> writes:
>>>swap(slot_ref(locals(), "x"), slot_ref(locals(), "y"))
>>
>> You need to be able to write the call as
>>
>> swap( x, y )
>
> Why?
Because that's the whole point of the exercise.
The exercise isn't to demonstrate how to swap two variables. In Python, that's
easy:
a, b = b, a
The exercise is to demonstrate pass by reference semantics. That requires
demonstrating the same semantics as the Pascal swap procedure:
procedure swap(var a, var b):
begin
tmp := a;
a := b;
b := tmp;
end;
(ignoring the type declarations for brevity).
Call by reference semantics enable you to call swap(x, y) to swap x and y in the
caller's scope. You don't call swap('x', 'y', scope_of_x, scope_of_y) or any
other variant. That isn't call by reference semantics.
The whole point of call by reference semantics is that the *compiler*, not the
programmer, tracks the variables and their scopes. The programmer just
says "swap x and y", and the compiler works out how to do it.
--
Steve
“Cheer up,” they said, “things could be worse.” So I cheered up, and sure
enough, things got worse.
More information about the Python-list
mailing list