Unpacking extension (Re: A small inconsistency in syntax?)
Greg Ewing
greg at cosc.canterbury.ac.nz
Mon Oct 29 22:30:11 EST 2001
Rainer Deyke wrote:
>
> tuple((a, b)) = 3, 4 # Syntax error.
What if, instead of just the special built-in constructors
() and [], you were allowed *any* constructor on the LHS?
Consider:
class Pair:
def __init__(self, x, y):
self.x = x
self.y = y
def __unpack__(self):
return x, y
p = Pair(17, 42)
Pair(a, b) = p
which should result in a == 17, b == 42.
More precisely, when the LHS is of the form
<expression evaluating to a class>(pattern, ...)
the RHS is checked to ensure it is an instance of the
LHS class (raising an exception otherwise), and its
__unpack__ method is called to produce a sequence which
is then unpacked into the argument patterns.
--
Greg Ewing, Computer Science Dept, University of Canterbury,
Christchurch, New Zealand
To get my email address, please visit my web page:
http://www.cosc.canterbury.ac.nz/~greg
More information about the Python-list
mailing list