On Sun, Jun 25, 2017 at 6:20 PM, Mikhail V <[email protected]> wrote:
> And it reminded me times starting with Python and wondering
> why I can't simply write something like:
>
> def move(x,y):
> x = x + 10
> y = y + 20
> move(x,y)
>
> Instead of this:
>
> def move(x,y):
> x1 = x + 10
> y1 = y + 20
> return x1,y1
> x,y = move(x,y)
you CAN do that, if x and y are mutable types.
I've found that when folk want this behavior (often called "pass by
reference" or something), what they really want in a mutable number. And
you can make one of those if you like -- here's a minimal one that can be
used as a counter:
In [12]: class Mint():
...: def __init__(self, val=0):
...: self.val = val
...:
...: def __iadd__(self, other):
...: self.val += other
...: return self
...:
...: def __repr__(self):
...: return "Mint(%i)" % self.val
so now your move() function can work:
In [17]: def move(x, y):
...: x += 1
...: y += 1
In [18]: a = Mint()
In [19]: b = Mint()
In [20]: move(a, b)
In [21]: a
Out[21]: Mint(1)
In [22]: b
Out[22]: Mint(1)
I've seen recipes for a complete mutable integer, though Google is failing
me right now.
This does come up fairly often -- I usually think there are more Pythonic
ways of solving the problem - like returning multiple values, but maybe it
has its uses.
-CHB
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
[email protected]
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/