> If this does all come to pass, then:
>
> s = {3,8,2}.frozen()
> will be slightly faster, in some case, than
> s = frozenset({3,8,2}
>
> but the result would be the same.
I really don't understand (having read everything above) why anyone prefers {1,2,3}.frozen() over f{1,2,3}.
Because it doesn't require any change to the language -- it's a feature, not a language change. Every change to the language is s substantial burden to the whole community. Even a "small" one like this.
It was absolutely worth for, e.g. f-strings, because they are a feature that has very broad use. This would have narrow use, and, I think even the OP said is more about potential optimization than a nicer syntax. If others think this syntax is substantially nicer, sure -- but then I'd argue that frozensets are simply not that commonly used -- you yourself realized that while you have an important use case, you aren't using literals that often anyway (at all?).
Python is not a high-performance language -- has it ever had a feature added primirly so it could be optimized? (that is a serious question).
And this does seem like a very small change, but is it?
1) folks, a couple years from now, reading new code might have never heard of a frozenset, and see:
frozenset(something)
or
{1,5,2}.frozen()
will probably have a pretty good idea what those mean, and if they have no clue, then it's easy to look up.
f{3,1,6}
not so much.
And once we have ONE prefix on a bracket, I"ll bet you folks will suggest more ...
small change
medium churn
tiny benefit
(frankly, it's confusing enough that {a,b,c} makes a set and {} makes a dict, but what can we do? there's only so many brackets :-(
-CHB
-- Christopher Barker, PhD (Chris)
Python Language Consulting
- Teaching
- Scientific Software Development
- Desktop GUI and Web Development
- wxPython, numpy, scipy, Cython