I think that a significant motivation for people that propose set literals is that the following is just plain ugly:
s = set([1,2,3]) It seems much more natural to write: s = set(1, 2, 3) However, it is fairly common to want to build a set from a collection, an iterator, or a genexp. With the current notation, all three of these are easy. But with this "more natural" notation, they're no longer possible without resorting to varargs (which would create an unnecessary imtermediary tuple). I.e., we don't want to lose the ability to do any of the following: s = set(my_list) s = set(enumerate(my_list)) s = set(x for x in collection if x>10) One way around this conflict might be to define a new factory function, that generates a set from an iterable. I.e., something like: s = set.from_iter(my_list) s = set.from_iter(enumerate(my_list)) s = set.from_iter(x for x in collection if x>10) (But with a better name than 'from_iter' :) ) The disadvantage, of course, is that it makes building sets from iterables less simple. And this certainly might be enough of a disadvantage to rule out this solution. But I thought I'd throw it out, anyway, to see what people think. I'm personally +0 on this proposal if a good name can be thought of for the factory function; and -0 if a good name can't be thought of. If this proposal does gain support, then it should presumably be applied to other data types as well, for consistency. I.e.: l = list(1, 2, 3) l = list.from_iter([1, 2, 3]) d = dict(('x', 'y'), ('a', 'b')) d = dict.from_iter((x,i) for (i,x) in enumerate(collection)) t = tuple(1, 2, 3) t = tuple.from_iter(collection) -Edward _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com