все Python 3astпонятие
ast.Subscript
выражения
Узел обращения по индексу value[slice]: value — что индексируют, slice — индекс, срез Slice или кортеж, ctx — Load, Store или Del.
Синтаксис
ast.Subscript(value, slice, ctx=ast.Load())
С Python 3.9 в поле slice лежит само выражение: обёртки Index и ExtSlice остались в старых версиях, и код, читающий node.slice.value, сломан. При нескольких индексах d[1, 2:3] slice — Tuple из Constant и Slice. Аннотации list[int] и dict[str, int] — тоже Subscript, так что «найти все индексации» без фильтра заденет подсказки типов.
Примеры
import ast
s = ast.parse('a[0] = d[1, 2:3]').body[0]
print(type(s.targets[0]).__name__, type(s.targets[0].ctx).__name__) # → Subscript Store
print([type(e).__name__ for e in s.value.slice.elts]) # → ['Constant', 'Slice']
import ast
ann = ast.parse('x: list[int]').body[0].annotation
print(type(ann).__name__, ann.value.id, ann.slice.id) # → Subscript list int
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности