[Tutor] beginning to code
Chris Angelico
rosuav at gmail.com
Fri Sep 22 07:47:28 EDT 2017
On Fri, Sep 22, 2017 at 9:24 PM, Marko Rauhamaa <marko at pacujo.net> wrote:
> bartc <bc at freeuk.com>:
>
>> On 22/09/2017 10:23, Marko Rauhamaa wrote:
>>> However, Python doesn't need any language changes to implement memory
>>> slots. A memory slot could be defined as any object that implements
>>> "get()" and "set(value)" methods:
>>
>> I didn't understand your examples.
>>
>> Can Python be used to write, say, a swap() function that works with any
>> argument types (not just classes or lists)? Example:
>>
>> def swap(&a,&b): # made up syntax
>> a, b = b, a
>>
>> x=10
>> y="Z"
>> swap(x,y)
>> print (x,y) # "Z" and "10"
>
> Yes, following my recipe:
>
> def swap(ref_a, ref_b):
> a, b = ref_a.get(), ref_b.get()
> ref_a.set(b)
> ref_b.set(a)
>
> x = 10
> y = "Z"
> swap(slot_ref(locals(), "x"), slot_ref(locals(), "y"))
> print(x, y) # "Z" and 10
Sure, let me just put that into a function. CPython 3.7, although I'm
pretty sure most CPython versions will do the same, as will several of
the other Pythons.
(Side point: Your slot_ref function is rather bizarre. It's a closure
AND a class, just in case one of them isn't sufficient. The following
code is copied and pasted from two of your posts and is unchanged
other than making try_swapping into a function.)
>>> def slot_ref(dict_or_array, key_or_index):
... class SlotRef:
... def get(self): return dict_or_array[key_or_index]
... def set(self, value): dict_or_array[key_or_index] = value
... return SlotRef()
...
>>> def swap(ref_a, ref_b):
... a, b = ref_a.get(), ref_b.get()
... ref_a.set(b)
... ref_b.set(a)
...
>>> def try_swapping():
... x = 10
... y = "Z"
... swap(slot_ref(locals(), "x"), slot_ref(locals(), "y"))
... print("x, y =", x, y)
...
>>> try_swapping()
x, y = 10 Z
Strange... doesn't seem to work. Are you saying that Python is
pass-by-reference outside of a function and pass-by-value inside?
Because that'd be just insane.
Or maybe what you have here isn't a real reference at all.
ChrisA
More information about the Python-list
mailing list