Thanks for all the discussion on this. Very illuminating. Sorry for the long delay in responding--deadlines intervened.
I will use the list comprehension syntax for the foreseeable future. Tim, I agree with you about the slurping in final position--it's actually quite surprising. As I'm sure you realized, that behavior makes your 'tidier' version: a,b,c,d,e, *more_dict_generator = (dict() for _ in itertools.count()) break with a MemoryError, which I don't think is the result that most people would expect. Stephen wrote: > While slightly ugly, it doesn't seem ugly enough to justify the > extra complexity of special syntax for such a special case. You're probably right (although for my coding this multiple assignment scenario is a pretty ordinary case.) Anyway, I'll shop the a,b,c = *dict() syntax over to python-ideas just to see what they say. Thanks again, everyone! Happy Python. On Aug 3, 7:25 am, Tim Chase <python.l...@tim.thechases.com> wrote: > On 08/03/2011 03:36 AM, Katriel Cohn-Gordon wrote: > > > On Wed, Aug 3, 2011 at 9:25 AM, Steven D'Aprano wrote: > >> a, b, c, d, e = [dict() for i in range(5)] > > > I think this is good code -- if you want five different dicts, > > then you should call dict five times. Otherwise Python will > > magically call your expression more than once, which isn't > > very nice. And what if your datatype constructor has > > side-effects? > > If the side-effects are correct behavior (perhaps opening files, > network connections, or even updating a class variable) then > constructor side-effects are just doing what they're supposed to. > E.g. something I use somewhat regularly in my code[*]: > > a,b,c,d = (file('file%i.txt', 'w') for i in range(4)) > > If the side-effects aren't performing the correct behavior, fix > the constructor. :) > > -tkc > > [*] okay, it's more like > > (features, > adjustments, > internet, > ) = (file(fname) for fname in ( > 'features.txt', > 'adjustments.txt', > 'internet.txt' > ) > > or even > > (features, > adjustments, > internet, > ) = ( > set( > line.strip().upper() > for line > in file(fname) > if line.strip() > ) > for fname in ( > 'features.txt', > 'adjustments.txt', > 'internet.txt' > ) > > to load various set() data from text-files. -- http://mail.python.org/mailman/listinfo/python-list