On 12Aug2021 14:05, eloi.riv...@aquilenet.fr <eloi.riv...@aquilenet.fr> wrote:
>This is how slices are used in the python standard library, indeed, but that 
>does not stop me from interpreting the slices as "inclusive by default" in my 
>library.
>The inconsistency with the rest of the python standard library could be 
>misleading, but I think maybe less than off-by-1 errors?

I think the misleadingness is identical to off-by-1 errors.

>You raise a good point however, that is: how to write a slice with 
>expliciting the inclusiveness of one of the limit values?

Well, I have seen this done using a combination of square and round 
brackets:

    [12,19)

which, IIRC, means inclusive on the left end (from the "[") and 
exclusive on the right (from the ")"). Obviously this would be a 
disaster in Python code, alas.

I do like the idea of bare slices but I also almost never make them. The 
is perhaps because they're tedious to type. Instead I find myself doing 
one of 2 things:
- a function f(low,high) returning something to do with that range
- a instance method __getitem__ handling slices, so the user can write 
  x[12:15] directly. Not creating a slice directly, but getting that 
  range from "x", a sliceable object

Have you looked at SQLAlchemy's core SQL stuff? Tables have columns, so 
you can write:

    the_table.c.column_name

to reference the column "column_name". That is actually a reference to a 
column. It lets you write:

    the_table.c.column_name >= 12 and the_table.c.column_name < 15

in code and get SQL out the end. Of course the concise way is sometimes

    col = the_table.c.column_name
    col >= 12 and col < 15

You can probably even write:

    12 <= col < 15

using the normal Python syntax. This works because a column reference 
implemenets __lt__ and friends, so that Python comparisons return "SQL 
comparison objects".

You could implement such objects too. And have then support slicing via 
__getitem__. That might return some kind of "range of column values" 
objects, which could be used in expressions like this:

    attr[12:15]

Unfortunately that looks to my eye like "get me these elements" rather 
than a test, but in the right context (your queries) it might be 
intuitive.

Cheers,
Cameron Simpson <c...@cskk.id.au>
_______________________________________________
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/UTYYHEQPATCWDR3FZX7HMQSSGN4LAJ5Q/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to