Python的AST中的ExtSlice节点表示什么语法?

时间:2011-12-03 18:58:50

标签: python abstract-syntax-tree internals

我正在浏览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 个答案:

答案 0 :(得分:4)

扩展切片是具有多个部分的切片,使用某些切片特定的特征。

切片特定功能类似于...(文字省略号)或:(测试分隔符)。

因此,ExtSliceo[...: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>
>>>