Nice! On Sun, Oct 25, 2020 at 9:59 PM Dennis Sweeney <sweeney.dennis...@gmail.com> wrote:
> What if the mapping assignment were more harmonious with the pattern > matching PEP? Something like this: > > items = {'eggs': 2, 'cheese': 3, 'spam': 1} > {'eggs': eggs, 'spam': i_dont_need_to_name_this_spam, **rest} = items > assert i_dont_need_to_name_this_spam == 1 > assert eggs == 2 and cheese == 3 > assert rest == {'cheese': 3} > > The keys here could be arbitrary hashables and the "values" could be > arbitrary assignment targets (assigned all-or-nothing). This wouldn't need > the right-hand-side double-star, and I think it more closely resembles the > sequence unpacking assignment syntax. You can assign to a (thing that looks > like a) tuple or to a (thing that looks like a) list or to a sequence > subscript or object attribute, why not be able to assign to a (thing that > looks like a) dictionary? This also avoids polluting the local namespace in > case one of your keys is the string "range" or something. It also feels > less magical to me, albeit more verbose. > > Calls to a hypothetical parse/sscanf function could closely mirror some > str.format() calls: > > text = "{a}, {b}, {c}".format(**{'a': a0, 'b': b0, 'c': c0}) > {'a': a1, 'b': b1, 'c': c1} = "{a}, {b}, {c}".parse(text) > assert (a1, b1, c1) == (a0, b0, c0) > > Alternative positional parsing would be useful as well, as in: > > text = "{}, {}, {}".format(a0, b0, c0) > a1, b1, c1 = "{}, {}, {}".parse(text) > assert (a1, b1, c1) == (a0, b0, c0) > > This way, pattern.format() and pattern.parse() would be trying to be > inverses of each other (as much as is reasonable, probably limited to > parsing strings, floats and ints). > > Then maybe people could get used to a format-string-like mini-language for > parsing, and eventually, the f-string assignment might be better received, > and we could propose something like > > text = f"{a0}, {b0}, {c0}" > f"{a1}, {b1}, {c1}" = text > assert (a1, b1, c1) == (a0, b0, c0) > > as well, where we lose some of the flexibility but gain better D.R.Y. and > more visual locality, useful in the simple cases. I see the potential for a > strong analogy: > > positional format() : keyword-based format() : fstrings > :: > positional parse() : keyword-based parse(): assignment to fstrings > _______________________________________________ > Python-ideas mailing list -- python-ideas@python.org > To unsubscribe send an email to python-ideas-le...@python.org > https://mail.python.org/mailman3/lists/python-ideas.python.org/ > Message archived at > https://mail.python.org/archives/list/python-ideas@python.org/message/H5252OAGH2IWEVQ26F2OWNQZCGMVNZWP/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/NVP4U44YXECN27IP3HXVGUF4XJK6LA6K/ Code of Conduct: http://python.org/psf/codeofconduct/