Una fetta seleziona un intervallo di elementi in una sequenza (per esempio, una stringa, una tupla o una lista). L'affettamento può essere usato come un'espressione o come identificativo in istruzioni di assegnamento o cancellazione. La sintassi per un'affettamento è:
slicing |
::= | simple_slicing | extended_slicing |
simple_slicing |
::= | primary "[" short_slice "]" |
extended_slicing |
::= | primary "[" slice_list "]" |
slice_list |
::= | slice_item ("," slice_item)* [","] |
slice_item |
::= | expression | proper_slice | ellipsis |
proper_slice |
::= | short_slice | long_slice |
short_slice |
::= | [lower_bound] ":" [upper_bound] |
long_slice |
::= | short_slice ":" [stride] |
lower_bound |
::= | expression |
upper_bound |
::= | expression |
stride |
::= | expression |
ellipsis |
::= | "..." |
C'è ambiguità nella sintassi formale: tutto quello che sembra un lista di espressioni sembra anche una lista di fette, così ogni subscription può essere interpretata come un'affettamento. Invece di complicare la sintassi, l'ambiguità viene evitata definendo che in questo caso l'interpretazione come una subscription ha la priorità sull'affettamento (questo è il caso in cui la lista di fette non contiene fette appropriate né elementi ellittici). In modo simile, quando la lista di fette ha esattamente una fetta concisa e nessuna virgola a seguire, l'interpretazione come semplice affettamento ha la priorità come se fosse un'affettamento esteso.
Segue la semantica per un'affettamento semplice. La primitiva deve
valutare una sequenza. Le espressioni di partenza e di arrivo, se
presenti, devono esprimere un intero; i valori predefiniti sono
rispettivamente zero e sys.maxint
. Se entrambi sono negativi,
gli viene aggiunta la lunghezza della sequenza. L'affettamento
seleziona quindi tutti gli elementi con indice k cosicché
i <= k < j
dove i e j sono i
legami di partenza ed arrivo specificati. Questa può essere una
sequenza vuota. Non è un errore se i o j oltrepassano
l'intervallo di indici valido (se gli elementi non esistono, non
vengono selezionati).
Segue la semantica per un'affettamento esteso. La primitiva deve
valutare una mappa che viene indicizzata con una chiave che è
costituita almeno da una virgola, la chiave è una tupla contenente la
conversione degli elementi della fetta; altrimenti, la conversione
della sola fetta è la chiave. La conversione di un elemento di una
fetta ellittica è l'oggetto built-in Ellipsis
. La conversione
di una fetta opportuna è un oggetto fetta (vedete la
sezione 3.2) i cui attributi di partenza, arrivo e passo
(NdT: start, stop e step) sono i valori
dell'espressione data come lower_bound, upper_bound e stride,
rispettivamente, sostituendo None
ad espressioni omesse.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.