On Sun, Sep 27, 2020 at 12:43 AM Steven D'Aprano <st...@pearwood.info>
wrote:

> On Sat, Sep 26, 2020 at 01:47:56PM -0300, Sebastian Kreft wrote:
>
> > In this fashion have you considering having keyword only indices, that is
> > to only allow either obj[1, 2] or obj[row=1, col=2] (if the class
> supports
> > it), and disallow mixing positional and keyword indices, meaning obj[1,
> > col=2] would be a SyntaxError.
>
> That would severely reduce the usefulness of this feature for me,
> probably by 80 or 90%, and possibly make it useless for xarray and
> pandas.
>
> (I don't speak for the pandas or xarray devs, I'm happy to be
> corrected.)
>
> But for my own code, my primary use-case is to have a mixed positional
> index and keyword arguments. I would *much* rather give up keyword-only
> subscripting. Keyword-only subscripting would be a convenience and a
> useful feature, but it's mixed subscripting that I am really hungry for.
>

Hi Steven, could you share some examples of what you have in mind. Having a
more concrete example of an API that would benefit from mixed-subscripting
would allow us to better understand its usefulness.

I'm uneasy with the abuse-of-notation potential of this proposed feature,
especially around the use of **kwd and mixed subscripting. That being said,
I do understand why it may be appealing to others, as that could open the
door for a more expressive language and maybe even better suited for some
DSLs.



>
> Hmmm, that's a thought... maybe we should just prohibit keyword-only
> calls for now? People who want a "keyword only" call can provide their
> own "do nothing" sentinel as the index.
>
> For my own purposes, I could easily adapt the keyword-only cases to use
> None as an explicit sentinal:
>
>     matrix[row=1]  # Nice to have.
>     matrix[None, row=1]  # Good enough for my purposes.
>
> so for my own purposes, if keyword-only is too hard, I'd be happy to
> drop it out of the PEP and require an explicit index.
>
>
> > If we followed that path, then adding a new set of dunders may not be
> that
> > problematic as the use case would be slightly different than the current
> > semantics.
>
> I don't see how "the use case is different" solves the problems with
> adding new dunders.
>
> Adding new dunders is problematic because:
>
> * they probably require new C level slots in objects, increasing
>   their size;
>
> * and the added complexity and likelihood of confusion for
>   developers. Do I write `__getitem__` or `__getindex__`?
>
> We had this back in Python 1 and 2 days with `__*item__` and
> `__*slice__` dunders and moved away from that, let's not revert back to
> that design if we can avoid it.
>
>
> > I also agree with Stefano that something like a[1, 2, unit="meters"]
> feels
> > really odd,
>
> Could be because of the misspelling of metres (unit of measurement)
> versus meters (things you read data from) *wink*
>
> Without knowing what the object `a` represents, or what the meaning of
> the subscript is, how can we possibly judge whether this is a reasonable
> use of a keyword subscript or not?
>
>
>
> Stefano wrote:
>
> > > a[1, 2, unit="meters"]
> > >
> > > makes me feel uncomfortable, although I might learn to accept it. In
> > > particular, the above case becomes kind of odd when you use it for
> > > setitem and delitem
> > >
> > > a[1, 2, unit="meters"] = 3
> > >
> > > what does this mean? convert 3 to meters and store the value in a?
>
> You made the example up, so you should know what it means :-)
>
> I don't even know what `a[1, 2, unit="meters"]` means since we don't
> know what `a` is.
>
>
> > > Then why isn't the unit close to 3, as in
> > >
> > > a[1,2] = 3 * meters
> > >
> > > and what about this one?
> > >
> > > del a[1, 2, unit="meters"] # and this one?
>
> In my own use-case, all three get/set/delete operations will support the
> same keywords, but just because we syntactically allow subscripts
> doesn't make it mandatory to use them identically useful for all three
> opperations in all cases. There is no need for the dunder to support a
> keyword that makes no sense for that dunder.
>
> For example, suppose we had a sequence-like mapping that supports this
> get operation:
>
>     table[index, default="index out of range"]
>
> That doesn't mean that table has to support the same keyword
> when setting or deleting, it can use different keywords that make no
> sense when getting:
>
>     table = Table([1, 2, 3, 4])
>     table[10, fill=-1] = 5
>     print(table)
>     # => [1, 2, 3, 4, -1, -1, -1, -1, -1, -1, 5]
>
>     del table[index, errors="ignore"]  # Silence error if out of range.
>
> There's no requirement that the three get/set/delete operations have to
> use the same keywords, or any keywords at all, only that they *could* if
> required.
>
> *Allowing* symmetry between the three options is a must; *requiring*
> symmetry between them is not.
>
>
>
> --
> Steve
> _______________________________________________
> 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/OEBA3N5UXSTJL3QIQMQIHQ5DOBTAYETL/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
Sebastian Kreft
_______________________________________________
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/5ANOFZWU7ZHZJSZESYUGYLFBJLJCUIIK/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to