Какой синтаксис представлен узлом ExtSlice в AST Python? - PullRequest
3 голосов
/ 03 декабря 2011

Я пробираюсь через модуль 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 Ответ

4 голосов
/ 04 декабря 2011

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

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

Итак, пример, где 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>
>>> 
...