[Tutor] beginning to code
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
>> print (x,y) # "Z" and "10"
> Yes, following my recipe:
> def swap(ref_a, ref_b):
> a, b = ref_a.get(), ref_b.get()
> 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()
>>> def try_swapping():
... x = 10
... y = "Z"
... swap(slot_ref(locals(), "x"), slot_ref(locals(), "y"))
... print("x, y =", x, y)
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.