On Mon, May 29, 2017 at 11:59 AM, Neil Girdhar <mistersheik@gmail.com> wrote:
A long time ago, I proposed that the dict variants (sorteddict, defaultdict, weakkeydict, etc.) be made more discoverable by having them specified as keyword arguments and I got the same feedback that the poster here is getting. Now, instead of moving these classes into dict, why not have a factory like
dict.factory(values=None, *, ordered=True, sorted=False, has_default=False, weak_keys=False, weak_values=False, …)
Hmm ... I don't think that I like this. For one, it greatly increases the amount of surface area that needs to be maintained in the standard library. As far as I know, we don't currently have a OrderedWeakKeyDictionary with defaultdict behavior. If this was to be added, then each of the combinations of input keyword arguments would need to be supported. Many of them probably don't have very compelling use-cases or they might not have semantics that would be easy to agree upon a "preferred behavior" (Assuming that a mythological SortedDict pops into existence in the standard lib, what happens if you call `dict.factory(sorted=True, ordered=True)`?). Of course, this sets a precedence that future dict subclasses need to be added to the `dict.factory` constructor as well which risks a very bloated signature (or, someone has to make the decision about which subclasses should be available and which should be left off ...). This last argument can repurposed against providing easy access to builtin dict subclasses via their own methods (`dict.defaultdict(...)`). I don't find very cumbersome to import the dict subclasses that I need from the locations where they live. I like that it forces me to be explicit and I think that it generally makes reading the code easier in the normal cases (`defaultdict(in)` vs. `dict.factory(default=int)`). Of course, if someone finds this idea particularly interesting, they could definitely explore the idea more by creating a package on pypi that attempts to provide this factory function. If it got usage, that might go a long way to convincing us nay-sayers that this idea has legs :-).
If prefers the keyword-argument as options to the keyword-argument as initializer magic, they can set:
dict = dict.factory
Best,
Neil
On Thursday, March 9, 2017 at 5:58:43 PM UTC-5, Chris Barker wrote:
If we really want to make defaultdict feel more "builtin" (and I don't see
any reason to do so), I'd suggest adding a factory function:
dict.defaultdict(int)
Nice.
I agree -- what about:
dict.sorteddict() ??
make easy access to various built-in dict variations...
-CHB
--
Christopher Barker, Ph.D. Oceanographer
Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception
Chris....@noaa.gov
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
-- Matt Gilson | Pattern Software Engineer getpattern.com <https://www.getpattern.com?utm_source=email&utm_medium=email&utm_campaign=signature-matt>