New submission from Joe Jevnik:

I often find that when working with pandas and numpy I want to store slice 
objects in variables to pass around and re-use; however, the syntax for 
constructing a slice literal outside of an indexer is very different from the 
syntax used inside of a subscript. This patch proposes the following change:

    slice.literal

This would be a singleton instance of a class that looks like:

class sliceliteral(object):
    def __getitem__(self, key):
        return key


The basic idea is to provide an alternative constructor to 'slice' that uses 
the subscript syntax. This allows people to write more understandable code.

Consider the following examples:

reverse = slice(None, None, -1)
reverse = slice.literal[::-1]

all_rows_first_col = slice(None), slice(0)
all_rows_first_col = slice.literal[:, 0]

first_row_all_cols_but_last = slice(0), slice(None, -1)
first_row_all_cols_but_last = slice.literal[0, :-1]


Again, this is not intended to make the code shorter, instead, it is designed 
to make it more clear what the slice object your are constructing looks like.

Another feature of the new `literal` object is that it is not limited to just 
the creation of `slice` instances; instead, it is designed to mix slices and 
other types together. For example:

>>> slice.literal[0]
0
>>> slice.literal[0, 1]
(0, 1)
>>> slice.literal[0, 1:]
(0, slice(1, None, None)
>>> slice.literal[:, ..., ::-1]
(slice(None, None, None), Ellipsis, slice(None, None, -1)

These examples show that sometimes the subscript notation is much more clear 
that the non-subscript notation.
I believe that while this is trivial, it is very convinient to have on the 
slice type itself so that it is quickly available. This also prevents everyone 
from rolling their own version that is accesible in different ways (think 
Py_RETURN_NONE).
Another reason that chose this aproach is that it requires no change to the 
syntax to support.

There is a second change proposed here and that is to 'slice.__repr__'. This 
change makes the repr of a slice object match the new literal syntax to make it 
easier to read.

>>> slice.literal[:]
slice.literal[:]
>>> slice.literal[1:]
slice.literal[1:]
>>> slice.literal[1:-1]
slice.literal[1:-1]
>>> slice.literal[:-1]
slice.literal[:-1]
>>> slice.literal[::-1]
slice.literal[::-1]

This change actually affects old behaviour so I am going to upload it as a 
seperate patch. I understand that the change to repr much be less desirable 
than the addition of 'slice.literal'

----------
components: Interpreter Core
files: slice.patch
keywords: patch
messages: 244801
nosy: llllllllll
priority: normal
severity: normal
status: open
title: slice.literal notation
type: enhancement
versions: Python 3.6
Added file: http://bugs.python.org/file39614/slice.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue24379>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to