EuroPython 2006 and Py3.0
Antoon Pardon
apardon at forel.vub.ac.be
Fri Jul 14 13:28:43 EDT 2006
On 2006-07-14, Lawrence Oluyede <rhymes at myself.com> wrote:
> Antoon Pardon <apardon at forel.vub.ac.be> wrote:
>
>> These are just some ideas. Whether they fit into python or not I will
>> leave to the developers.
>
> I'm not a Python pro. but:
>
>> 1) Literal slices, in a sense we already have these, but they are
>> limited to indexing. You can't do something like fun(::). May
>> be this means the notation used now has to be adapted.
>
> I don't see the use case for this.
You don't think it usefull that when you need a slice as an argument
you can use the same notation as when you use when you need a
slice as an index?
I have a tree class, a tree acts like a dictionary, but when you
iterate over it, it always iterates over the keys in order. This
makes it usefull to iterate over a slice. So it would be usefull
if methods like keys, values and items could take a slice as
an argument and use the same notation for it. Something like
for k, v in t.items('a':'b'):
Which would iterate over all items where the key starts with
an 'a'. Sure you don't need it. You could just use
for k, v in t.items(slice('a','b')):
or you could define the items method with the same signature
as range or xrange. But it seems appropiate that the same
notation can be used anywhere.
>> 2) Iterable slices. Allow (provided the slice notation stays:)
>>
>> for i in (1:10):
>> ...
>>
>> to do the same as:
>>
>> for i in xrange(1,10):
>>
>> This will allow to get rid of both range and xrange. Xrange
>> is totally unnecessary and range(a,b) becomes list(a:b).
>
> -1. First: you have to introduce new syntax for an old thing.
That syntax already exists, it just is only available as an
index.
> Second:
> you overload the meaning of slicing and the slice operator and so on.
It's meaning is not overloaded, it just gets extra functionality.
> range is perfectly integrated and the right tool for the job.
Range as it is, is going to disappear. Last time I read the
python 3000 Pep range would get the functionality of xrange
and xrange would disappear, and those who want a list will
have to do: list(range(a,b))
> There's no
> need to introduce new syntax to iterate over a range of integers.
Need is such a strong word. In the end we don't need python, but
it seems very usefull to have it around. I understand that should this
be introduced it could make people uneasy, but I also think it
could be very usefull.
>> 4) Introduce Top and Bottom objects, which will allways
>> compare greater/smaller to other objects. Make them
>> the default values for the start and stop values of
>> slices.
>> 5) Give slices a "&" and "|" operator.
>>
>>
>> 7) Give slices the possibility to include the stop value.
>>
>> My first idea here was that the notation of slices
>> was adapted, so that what is a:b now would become
>> a:|b. A slice to include the b would then be a::b.
>> You could even have a slice that didn't include the
>> a but included the b like: a|:b
>>
>> Now I expect a lot of resitance here, so it this
>> seems not feasable, just drop it.
>>
>> 6) Is this is all asked too much, make slice at least
>> subclassable.
>
> Why do you need power slices?
Because it would have made things a lot of easier for me in
a number of cases. I have a table class that is like a
list but can start at any index, it sure would have been
easier to write with some of the possibilities above. I
though to just write my own slice class, but slice is not
subclassable, and when I just wrote my own from scratch,
with a start, stop and step attribute I got an error that
it wasn't an integer so couldn't be used as an index.
So much for duck taping.
But if this idea doesn't catch on, so be it.
--
Antoon Pardon
More information about the Python-list
mailing list