Нарізки
Оновлено: 24.04.2023
Нарізка вибирає діапазон елементів в об’єкті послідовності (наприклад, рядок, кортеж або список). Зрізи можуть використовуватися як вирази або як цілі в операторах призначення або del. Синтаксис нарізки:
slicing ::= primary "[" slice_list "]"
slice_list ::= slice_item ("," slice_item)* [","]
slice_item ::= expression | proper_slice
proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" [stride] ]
lower_bound ::= expression
upper_bound ::= expression
stride ::= expression
Тут існує неоднозначність у формальному синтаксисі: все, що виглядає як список виразів, також виглядає як список фрагментів, тому будь-яку підписку можна інтерпретувати як фрагмент. Замість подальшого ускладнення синтаксису, це усувається визначенням того, що в цьому випадку інтерпретація як підписка має пріоритет над інтерпретацією як нарізка (це випадок, якщо список зрізів не містить належного зрізу).
Семантика нарізки така. Основний індексується (використовуючи той самий метод __getitem__(), що й звичайна підписка) за допомогою ключа, створеного зі списку фрагментів, як показано нижче. Якщо список фрагментів містить принаймні одну кому, ключ є кортежем, що містить перетворення елементів фрагмента; в іншому випадку ключовим є перетворення елемента окремого фрагмента. Перетворення елемента фрагмента, який є виразом, є цим виразом. Перетворення правильного фрагмента є об’єктом фрагмента (див. розділ Стандартна ієрархія типів), у якого start, stop і step Атрибути — це значення виразів, поданих як нижня межа, верхня межа та крок, відповідно, замінюючи відсутні вирази на None.