I thought about it a lot recently. Specifically on your proposal, and in general. Unpacking expression can have a much more uniform treatment in the language, as an expression with special "bare tuple" type - like tuple, but "without the braces". It also gives mental explanation for the conditional expression, where "a if cond" is an unpack expression whose value is "*[a]" if cond hold, and "*[]" otherwise. without context, this is an error. But with an else, "a if cond else b" becomes "*[] else b" which evaluates to b. The result is exactly like today, but gives the ability to build conditional elements in a list literal: x = [foo(), bar() if cond, goo()] y = [1, bar()?, 3] x is a list of 2 elements or three elements, depending of the truthness of cond. y is a list of 2 elements or three elements, depending on whether bar() is None. It also opens the gate for None-coercion operator (discussed recently), where "x?" is replaced with "*[x if x is None]". If operations on this expression are mapped into the elements, "x?.foo" becomes "*[x.foo if x is None]" which is "x.foo" if x is not None, and "*[]" otherwise. It is similar to except-expression, but without actual explicit exception handling, and thus much more readable. Elazar On Tue, Oct 11, 2016 at 4:08 PM Martti Kühne <mar77i@mar77i.ch> wrote:
Hello list
I love the "new" unpacking generalisations as of pep448. And I found myself using them rather regularly, both with lists and dict. Today I somehow expected that [*foo for foo in bar] was equivalent to itertools.chain(*[foo for foo in bar]), which it turned out to be a SyntaxError. The dict equivalent of the above might then be something along the lines of {**v for v in dict_of_dicts.values()}. In case the values (which be all dicts) are records with the same keys, one might go and prepend the keys with their former keys using { **dict( ("{}_{}".format(k, k_sub), v_sub) for k_sub, v_sub in v.items() ) for k, v in dict_of_dicts.items() } Was anyone able to follow me through this?
cheers! mar77i _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/