On Sat, Apr 18, 2020 at 12:19:30PM -0400, David Mertz wrote: > On Sat, Apr 18, 2020, 8:15 AM Alex Hall <alex.moj...@gmail.com> wrote: > > > Under your proposal, these two programs are both valid syntax with > > different meanings: > > > > (1) > > > f(**{u, v}) > > > > (2) > > > x = {u, v} > > f(**x) > > > > I don't understand what the meaning of (2) would be. Currently it is a > TypeError... Is that "valid" because it's not a syntax error?!
Yes, as Andrew pointed out, it is valid syntax: it isn't rejected by the compiler, it generates byte-code, and then when you run it, it has behaves differently from (1). So it has a meaning: "raise TypeError in an inefficient fashion". Not *useful* meaning, to be sure, but still meaning. I think a fundamental point is that `**{identifier}` looks like you are applying `**` unpacking to a set, but you actually aren't, it is a special syntactic form. If that disturbs you, I'm not going to say you are wrong. I'm a little sad about it myself, I just don't give it a very high weighting since we already have plenty of other similar cases: func(a, b, c) # Not a tuple. import a, b, c # Also not a tuple. del a, b, c # Still not a tuple. mapping[key] # And not a single-item list either :-) I think I would be more concerned by this if I wanted this keyword argument shortcut to work everywhere, not just in function calls. E.g. mydict = **{a, b c} # like {'a': a, 'b': b, 'c': c} but I don't care much about that. -- Steven _______________________________________________ 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/N7JZ6ZTCHA6I2BY77WNUWFDFVRZFOYYU/ Code of Conduct: http://python.org/psf/codeofconduct/