On 17/08/2011 10:26, gc wrote:
On Aug 17, 3:13 am, Chris Angelico<ros...@gmail.com>  wrote:

Minor clarification: You don't want to initialize them to the same
value, which you can do already:

a=b=c=d=e=dict()

Right. Call the proposed syntax the "instantiate separately for each
target" operator.  (It can be precisely defined as a * on the RHS of a
one-into-many assignment statement--i.e. an assignment statement with
1 object on the RHS and more than 1 on the LHS).

I think that lazy unpacking is the more important issue because we can
replace instantiation with copying:

def copies(obj, count=None):
    if count is None:
        while True:
            yield obj.copy()
    else:
        for i in range(count):
            yield obj.copy()

(Should it yield deep copies, or should there be a separate deep_copies
function?)

It has only one very modest function, which is to unpack

a, b, c, d, e = *dict()

to

a, b, c, d, e = dict(), dict(), dict(), dict(), dict()

This becomes:

a, b, c, d, e = copies(dict(), 5)

With lazy unpacking it would become:

a, b, c, d, e = lazy copies(dict())

(Or whatever the syntax is.)

so that you have n separate objects instead of one. If you want the
same object duplicated five times, you'd best use a=b=c=d=e=dict().
(I'd guess that 90% of the people who try the a=b=c version actually
*want* separate objects and are surprised at what they get--I made
that mistake a few times!--but changing either behavior would be a
very bad idea. This proposed syntax would be the Right Way to get
separate objects.)

Maybe this is more visibly convenient with a complex class, like

x, y, z = *SuperComplexClass(param1, param2, kwparam = "3", ...)

x, y, z = lazy copies(SuperComplexClass(param1, etc, ...))

[snip]
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to