Update ref docs on slicing.

This commit is contained in:
Thomas Wouters 2007-09-04 09:03:59 +00:00
parent aeaa546d7e
commit 53de1902e7
1 changed files with 13 additions and 30 deletions

View File

@ -513,14 +513,10 @@ or list). Slicings may be used as expressions or as targets in assignment or
:keyword:`del` statements. The syntax for a slicing: :keyword:`del` statements. The syntax for a slicing:
.. productionlist:: .. productionlist::
slicing: `simple_slicing` | `extended_slicing` slicing: `primary` "[" `slice_list` "]"
simple_slicing: `primary` "[" `short_slice` "]"
extended_slicing: `primary` "[" `slice_list` "]"
slice_list: `slice_item` ("," `slice_item`)* [","] slice_list: `slice_item` ("," `slice_item`)* [","]
slice_item: `expression` | `proper_slice` slice_item: `expression` | `proper_slice`
proper_slice: `short_slice` | `long_slice` proper_slice: [`lower_bound`] ":" [`upper_bound`] [ ":" [`stride`] ]
short_slice: [`lower_bound`] ":" [`upper_bound`]
long_slice: `short_slice` ":" [`stride`]
lower_bound: `expression` lower_bound: `expression`
upper_bound: `expression` upper_bound: `expression`
stride: `expression` stride: `expression`
@ -530,36 +526,23 @@ expression list also looks like a slice list, so any subscription can be
interpreted as a slicing. Rather than further complicating the syntax, this is interpreted as a slicing. Rather than further complicating the syntax, this is
disambiguated by defining that in this case the interpretation as a subscription disambiguated by defining that in this case the interpretation as a subscription
takes priority over the interpretation as a slicing (this is the case if the takes priority over the interpretation as a slicing (this is the case if the
slice list contains no proper slice). Similarly, when the slice list has slice list contains no proper slice).
exactly one short slice and no trailing comma, the interpretation as a simple
slicing takes priority over that as an extended slicing.
.. XXX is the next paragraph stil correct?
The semantics for a simple slicing are as follows. The primary must evaluate to
a sequence object. The lower and upper bound expressions, if present, must
evaluate to plain integers; defaults are zero and the ``sys.maxint``,
respectively. If either bound is negative, the sequence's length is added to
it. The slicing now selects all items with index *k* such that ``i <= k < j``
where *i* and *j* are the specified lower and upper bounds. This may be an
empty sequence. It is not an error if *i* or *j* lie outside the range of valid
indexes (such items don't exist so they aren't selected).
.. index:: .. index::
single: start (slice object attribute) single: start (slice object attribute)
single: stop (slice object attribute) single: stop (slice object attribute)
single: step (slice object attribute) single: step (slice object attribute)
The semantics for an extended slicing are as follows. The primary must evaluate The semantics for a slicing are as follows. The primary must evaluate to a
to a mapping object, and it is indexed with a key that is constructed from the mapping object, and it is indexed with a key that is constructed from the
slice list, as follows. If the slice list contains at least one comma, the key slice list, as follows. If the slice list contains at least one comma, the
is a tuple containing the conversion of the slice items; otherwise, the key is a tuple containing the conversion of the slice items; otherwise, the
conversion of the lone slice item is the key. The conversion of a slice item conversion of the lone slice item is the key. The conversion of a slice
that is an expression is that expression. The conversion of a proper slice is a item that is an expression is that expression. The conversion of a proper
slice object (see section :ref:`types`) whose :attr:`start`, :attr:`stop` and slice is a slice object (see section :ref:`types`) whose :attr:`start`,
:attr:`step` attributes are the values of the expressions given as lower bound, :attr:`stop` and :attr:`step` attributes are the values of the expressions
upper bound and stride, respectively, substituting ``None`` for missing given as lower bound, upper bound and stride, respectively, substituting
expressions. ``None`` for missing expressions.
.. _calls: .. _calls: