Нарізки

Оновлено: 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.