Какой синтаксис представляет собой узел 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 ответ:
Расширенный срез-это срез с несколькими частями, который использует некоторую специфичную для среза функцию.
Специфической особенностью среза является что-то вроде
...
(буквальный эллипсис) или:
(тестовый разделитель).Итак, пример, где
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> >>>