Какой синтаксис представляет собой узел ExtSlice в Python по АСТ?


Я пробираюсь через модуль Python ast и не могу понять определение слайсов:

slice = Ellipsis | Slice(expr? lower, expr? upper, expr? step) 
                 | ExtSlice(slice* dims) 
                 | Index(expr value) 

Пока я знаю, что Ellipsis является [...], Slice является ли обычная [start:end:step] нотация, Index является [index], но какая нотация является ExtSlice?

1 3

1 ответ:

Расширенный срез-это срез с несколькими частями, который использует некоторую специфичную для среза функцию.

Специфической особенностью среза является что-то вроде ... (буквальный эллипсис) или : (тестовый разделитель).

Итак, пример, где ExtSlice используется для выражения типа o[...:None] или o[1,2:3].

Вот несколько примеров, демонстрирующих это:

>>> compile('o[x]', '<string>', 'exec', PyCF_ONLY_AST).body[0].value.slice
<_ast.Index object at 0xb72a9e6c>
>>> compile('o[x,y]', '<string>', 'exec', PyCF_ONLY_AST).body[0].value.slice
<_ast.Index object at 0xb72a9dac>
>>> compile('o[x:y]', '<string>', 'exec', PyCF_ONLY_AST).body[0].value.slice
<_ast.Slice object at 0xb72a9dcc>
>>> compile('o[x:y,z]', '<string>', 'exec', PyCF_ONLY_AST).body[0].value.slice
<_ast.ExtSlice object at 0xb72a9f0c>
>>>