[Python-3000] sets in P3K?

Alex Martelli aleaxit at gmail.com
Wed Apr 26 16:43:15 CEST 2006


On Apr 26, 2006, at 5:19 AM, Barry Warsaw wrote:
> On Tue, 2006年04月25日 at 15:48 -0700, Aahz wrote:
>>> My opinion: if we were designing Python from scratch right now, we 
>> might
>> well consider having only set literals and not dict literals. 
>> However,
>> I don't think we can have both set and dict literals, and I think 
>> that
>> removing dict literals (or list literals) counts as gratuitous 
>> breakage.
>> Agreed. The current status quo seems fine.
>> Losing listcomps won't be a big problem because they can be 
> automatically
>> fixed and they aren't much loss.
>> Totally half-baked way-pre-morning-coffee thought: isn't
>> [f(x) for x in seq]
>> just another way to spell
>> list(genexp) where genexp == f(x) for x in eq?
>> So, if there are no list comps any more, but list literal notation 
> could
> take a genexp, doesn't that give us today's syntactic convenience with
> tomorrow's consistence world view?

If I read you right, that is exactly the reason I would prefer that 
Python 3k *NOT* have both notations that work today, i.e.:
 [ f(x) for x in seq ]
as an exact synonym of
 list( f(x) for x in seq )
Today, among the reasons for preferring the list(...<genexp>...) form 
is that it doesn't leak name x into the enclosing scope. But even 
once py3k fixes that leakage, the list(...) form remains IMHO more 
readable -- and nobody's proposing to take it away, in any case, so 
the "one obvious way" mantra suggest taking away the alternate [...] 
syntax instead.
Among other things, this will place lists, sets and other (builtin or 
user-coded) collection types on even syntactic footing for 
comprehension purposes:
 list( f(x) for x in seq )
 set( f(x) for x in seq )
 deque( f(x) for x in seq )
 ...
rather than singling one or two types out for special, different 
alternative comprehension syntax.
On literals as opposed to comprehensions I have no strong opinions, 
although I don't think the status quo is actually ``fine'' (it IS a 
tiny bother, but a bother nevertheless, to have to write set 
((23,42,77)) vs [23, 42, 77]...!), neither is it "badly broken". In 
fact the most common beginner error in writing literals is using (23) 
instead of (23,) when trying to make a singleton tuple, and I have no 
great idea on how to fix that, anyway;-).
Alex


More information about the Python-3000 mailing list

AltStyle によって変換されたページ (->オリジナル) /