
On Tue, Nov 28, 2017 at 01:01:01AM +1100, Chris Angelico wrote:
And the status quo is noisy and has duplicated information (you have to match the ", 2" to the number of assignment targets).
Er, not really. How about: a, b = islice(iterable, 3, 10, 4) A somewhat unusual case, to be sure, but still legal.
I would support any syntax that (a) is currently illegal, (b) reads reasonably well, and (c) can't be TOO easily confused with something else.
Honestly, I don't see this as such a big deal that Python needs to support it at all: maybe +0.25 on the idea of non-consuming iterable unpacking. islice does the job. If we have it at all, it is yet another special syntax to learn, and I'm not convinced that the benefit outways the cost of learning yet more Perlish magic syntax for a marginal use-case. Especially if the syntax looks like grit on Tim's monitor. On the other hand, if we did get this, I would prefer magic syntax over a backwards incompatible change. On balance, given that * is already used for at least 11 different things already[1], I'd actually prefer the grit on the monitor. Perhaps x, y, ... = iterable to indicate non-consuming iterable unpacking. Or maybe x, y, / = iterable since in some sense this is the opposite of unpacking -- the whole point is to NOT unpack the remaining items. And the slash kind of looks like cutting off the process from continuing: unpack two items, then stop. ... maybe +0.5 with the slash syntax *wink* [1] Multiplication, exponentiation, sequence replication, *varargs, **keyword varargs, regexes, globs, import wild cards, iterable unpacking in function calls, extended iterable unpacking in assignments, dict unpacking -- have I missed any? -- Steve