On Sun, Aug 30, 2020 at 10:01 PM Random832 <random...@fastmail.com> wrote:

> > like `d[1,]` + keyword.
>
> perhaps, but I did have a thought after making that post.
>
> A new bytecode operation (we'll need one anyway, right?) which, in
> addition to passing in the positionals and the keywords, also passes along
> the information of whether or not the subscript contents consisted of
> precisely a single expression without a trailing comma


I *think* the trailing comma is shorthand for a larger class of problems.
That is, in the current system, you can only put a single expression in the
[], so a comma creates a tuple. Which means that:

i = (a,)
thing[i] = x

is the same as:
thing[a,] = x

and
i = (a, b, c)
thing[i] = x
is the same as:
thing[a, b, c] = x

etc ....

And I don't think, when the interpreter sees  a comma inside a [], there is
any way to know whether the user explicitly wanted a tuple, or wanted to
express multiple indexes. I suppose we could assume that a single comma was
not intended to be a tuple, but maybe it was?

THe real challenge here is that I suspect most users don't realize that
when you do, e.g. arr[i, j] in numpy, you are passing a tuple of two
indexes, rather than two separate values. Conversely, when you do, e.g.
a_dict[(a,b,c)] that you could hve omited the brackets and gotten the same
result.

but in current Python, it doesn't matter that folks don't realize that, as
you can in fact only put one expression in there, and the tuple
creating ends up being an implementation detail for most users.'

But once we add keyword arguments, then it will look a LOT more
like function call, and then folks will expect it to behave like a function
call, where thing(a, b) and thing((a,b)) are not, in fact the same -- but I
don't think there is any way to meet that expectation without breaking
existing code.

However, if we keep it like it is, only adding keywords, but not changing
anything about how the "positional" arguments are handled, then we have
backward compatibility, and naive users will only notice (maybe) that you
can't do *args. Which is not that big a deal -- all you have to say, really
is that tuple unpacking isn't allowed in indexing. Done. Anyone that wants
to know *why* not can do more research.

Key point: as a rule, classes that handle keyword indexes (e.g. xarray and
the like) will be written by a small number of people, and used by many
more -- and the authors of such classes are by definition more experienced
in general. So the priority has to be to keep things as simple as possible
for users of such classes.

-CHB












> (or with one, if that'd work better... i believe flagging either one of
> these cases provides enough information to determine what form of argument
> should be passed to the single-argument __getitem__).
> _______________________________________________
> 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/6KOU2FWQZX7YGINZYESMVDA3MJWSWWS3/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
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/6PJQNZIRQEHZF5M5LNQTIEAZX7N3KMVA/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to