On Thu, Jun 17, 2021 at 3:09 PM Steven D'Aprano <steve@pearwood.info> wrote:
On Thu, Jun 17, 2021 at 02:22:29PM -0700, Ben Rudiak-Gould wrote:
>     [*chunk for chunk in list_of_lists]

What would that do?

The difference between chunk and *chunk in the expression of a list comprehension would be the same as the difference between them in the expressions of a starred_list.

The only thing I can guess it would do is the
equivalent of:

    result = []
    for chunk in list_of_lists:
        result.append(*chunk)

which is a long and obfuscated way of saying `raise TypeError` :-)

It would be reasonable to allow list.append to take any number of arguments to be appended to the list, as though its definition was

    def append(self, *args):
        self.extend(args)

If it did, then that translation would work and do the right thing.

Some similar functions do accept multiple arguments as a convenience, though it's not very consistent:

    myset.add(1, 2)  # no
    myset.update([1, 2], [3, 4])  # ok
    mylist.append(1, 2)  # no
    mylist.extend([1, 2], [3, 4])  # no
    mydict.update({'a': 1}, b=2, c=3)  # ok
    mydict.update({'a': 1}, {'b': 2}, c=3)  # no

Well, there is this:

    result = []
    for chunk in list_of_lists:
        *temp, = chunk
        result.append(temp)

which would make it an obfuscated way to spell `list(chunk)`.

Unpacking would be useless in every context if you interpreted it like that.