blob: d84c841fa4a08e549b70b8f375c64b5221c953f6 [file] [log] [blame]
Alexander Belopolskyf0a0d142010-10-27 03:06:43 +00001:mod:`ast` --- Abstract Syntax Trees
2====================================
Georg Brandl0c77a822008-06-10 16:37:50 +00003
4.. module:: ast
5 :synopsis: Abstract Syntax Tree classes and manipulation.
6
7.. sectionauthor:: Martin v. Löwis <martin@v.loewis.de>
8.. sectionauthor:: Georg Brandl <georg@python.org>
9
Pablo Galindo114081f2020-03-02 03:14:06 +000010.. testsetup::
11
12 import ast
13
Raymond Hettinger10480942011-01-10 03:26:08 +000014**Source code:** :source:`Lib/ast.py`
Georg Brandl0c77a822008-06-10 16:37:50 +000015
Raymond Hettinger4f707fd2011-01-10 19:54:11 +000016--------------
17
Georg Brandl0c77a822008-06-10 16:37:50 +000018The :mod:`ast` module helps Python applications to process trees of the Python
19abstract syntax grammar. The abstract syntax itself might change with each
20Python release; this module helps to find out programmatically what the current
21grammar looks like.
22
Benjamin Petersonec9199b2008-11-08 17:05:00 +000023An abstract syntax tree can be generated by passing :data:`ast.PyCF_ONLY_AST` as
Georg Brandl22b34312009-07-26 14:54:51 +000024a flag to the :func:`compile` built-in function, or using the :func:`parse`
Georg Brandl0c77a822008-06-10 16:37:50 +000025helper provided in this module. The result will be a tree of objects whose
Benjamin Petersonec9199b2008-11-08 17:05:00 +000026classes all inherit from :class:`ast.AST`. An abstract syntax tree can be
27compiled into a Python code object using the built-in :func:`compile` function.
Georg Brandl0c77a822008-06-10 16:37:50 +000028
Georg Brandl0c77a822008-06-10 16:37:50 +000029
Pablo Galindo114081f2020-03-02 03:14:06 +000030.. _abstract-grammar:
31
32Abstract Grammar
33----------------
34
35The abstract grammar is currently defined as follows:
36
37.. literalinclude:: ../../Parser/Python.asdl
Batuhan Taskayab7a78ca2020-05-07 23:57:26 +030038 :language: asdl
Pablo Galindo114081f2020-03-02 03:14:06 +000039
40
Georg Brandl0c77a822008-06-10 16:37:50 +000041Node classes
42------------
43
44.. class:: AST
45
46 This is the base of all AST node classes. The actual node classes are
47 derived from the :file:`Parser/Python.asdl` file, which is reproduced
48 :ref:`below <abstract-grammar>`. They are defined in the :mod:`_ast` C
49 module and re-exported in :mod:`ast`.
50
51 There is one class defined for each left-hand side symbol in the abstract
52 grammar (for example, :class:`ast.stmt` or :class:`ast.expr`). In addition,
53 there is one class defined for each constructor on the right-hand side; these
54 classes inherit from the classes for the left-hand side trees. For example,
55 :class:`ast.BinOp` inherits from :class:`ast.expr`. For production rules
56 with alternatives (aka "sums"), the left-hand side class is abstract: only
57 instances of specific constructor nodes are ever created.
58
Serhiy Storchaka913876d2018-10-28 13:41:26 +020059 .. index:: single: ? (question mark); in AST grammar
60 .. index:: single: * (asterisk); in AST grammar
61
Georg Brandl0c77a822008-06-10 16:37:50 +000062 .. attribute:: _fields
63
64 Each concrete class has an attribute :attr:`_fields` which gives the names
65 of all child nodes.
66
67 Each instance of a concrete class has one attribute for each child node,
68 of the type as defined in the grammar. For example, :class:`ast.BinOp`
69 instances have an attribute :attr:`left` of type :class:`ast.expr`.
70
71 If these attributes are marked as optional in the grammar (using a
72 question mark), the value might be ``None``. If the attributes can have
73 zero-or-more values (marked with an asterisk), the values are represented
74 as Python lists. All possible attributes must be present and have valid
75 values when compiling an AST with :func:`compile`.
76
77 .. attribute:: lineno
78 col_offset
Ivan Levkivskyi9932a222019-01-22 11:18:22 +000079 end_lineno
80 end_col_offset
Georg Brandl0c77a822008-06-10 16:37:50 +000081
82 Instances of :class:`ast.expr` and :class:`ast.stmt` subclasses have
Matthew Suozzobffb1372020-11-03 16:28:42 -050083 :attr:`lineno`, :attr:`col_offset`, :attr:`end_lineno`, and
84 :attr:`end_col_offset` attributes. The :attr:`lineno` and :attr:`end_lineno`
85 are the first and last line numbers of source text span (1-indexed so the
86 first line is line 1) and the :attr:`col_offset` and :attr:`end_col_offset`
87 are the corresponding UTF-8 byte offsets of the first and last tokens that
88 generated the node. The UTF-8 offset is recorded because the parser uses
89 UTF-8 internally.
Ivan Levkivskyi9932a222019-01-22 11:18:22 +000090
91 Note that the end positions are not required by the compiler and are
92 therefore optional. The end offset is *after* the last symbol, for example
93 one can get the source segment of a one-line expression node using
94 ``source_line[node.col_offset : node.end_col_offset]``.
Georg Brandl0c77a822008-06-10 16:37:50 +000095
96 The constructor of a class :class:`ast.T` parses its arguments as follows:
97
98 * If there are positional arguments, there must be as many as there are items
99 in :attr:`T._fields`; they will be assigned as attributes of these names.
100 * If there are keyword arguments, they will set the attributes of the same
101 names to the given values.
102
103 For example, to create and populate an :class:`ast.UnaryOp` node, you could
104 use ::
105
106 node = ast.UnaryOp()
107 node.op = ast.USub()
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300108 node.operand = ast.Constant()
109 node.operand.value = 5
Georg Brandl0c77a822008-06-10 16:37:50 +0000110 node.operand.lineno = 0
111 node.operand.col_offset = 0
112 node.lineno = 0
113 node.col_offset = 0
114
115 or the more compact ::
116
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300117 node = ast.UnaryOp(ast.USub(), ast.Constant(5, lineno=0, col_offset=0),
Georg Brandl0c77a822008-06-10 16:37:50 +0000118 lineno=0, col_offset=0)
119
Serhiy Storchaka85a2eef2020-02-17 11:03:00 +0200120.. versionchanged:: 3.8
121
122 Class :class:`ast.Constant` is now used for all constants.
123
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200124.. versionchanged:: 3.9
125
126 Simple indices are represented by their value, extended slices are
127 represented as tuples.
128
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300129.. deprecated:: 3.8
130
Serhiy Storchaka85a2eef2020-02-17 11:03:00 +0200131 Old classes :class:`ast.Num`, :class:`ast.Str`, :class:`ast.Bytes`,
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300132 :class:`ast.NameConstant` and :class:`ast.Ellipsis` are still available,
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200133 but they will be removed in future Python releases. In the meantime,
Serhiy Storchaka85a2eef2020-02-17 11:03:00 +0200134 instantiating them will return an instance of a different class.
Serhiy Storchaka3f228112018-09-27 17:42:37 +0300135
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200136.. deprecated:: 3.9
137
138 Old classes :class:`ast.Index` and :class:`ast.ExtSlice` are still
139 available, but they will be removed in future Python releases.
140 In the meantime, instantiating them will return an instance of
141 a different class.
142
Pablo Galindo62e3b632021-03-03 18:25:41 +0000143.. note::
144 The descriptions of the specific node classes displayed here
145 were initially adapted from the fantastic `Green Tree
146 Snakes <https://greentreesnakes.readthedocs.io/en/latest/>`__ project and
147 all its contributors.
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200148
Pablo Galindo114081f2020-03-02 03:14:06 +0000149Literals
150^^^^^^^^
Georg Brandl0c77a822008-06-10 16:37:50 +0000151
Pablo Galindo114081f2020-03-02 03:14:06 +0000152.. class:: Constant(value)
Georg Brandl0c77a822008-06-10 16:37:50 +0000153
Pablo Galindo114081f2020-03-02 03:14:06 +0000154 A constant value. The ``value`` attribute of the ``Constant`` literal contains the
155 Python object it represents. The values represented can be simple types
156 such as a number, string or ``None``, but also immutable container types
157 (tuples and frozensets) if all of their elements are constant.
Georg Brandl0c77a822008-06-10 16:37:50 +0000158
Pablo Galindo114081f2020-03-02 03:14:06 +0000159 .. doctest::
Georg Brandl0c77a822008-06-10 16:37:50 +0000160
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000161 >>> print(ast.dump(ast.parse('123', mode='eval'), indent=4))
162 Expression(
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200163 body=Constant(value=123))
Pablo Galindo114081f2020-03-02 03:14:06 +0000164
165
166.. class:: FormattedValue(value, conversion, format_spec)
167
168 Node representing a single formatting field in an f-string. If the string
169 contains a single formatting field and nothing else the node can be
170 isolated otherwise it appears in :class:`JoinedStr`.
171
172 * ``value`` is any expression node (such as a literal, a variable, or a
173 function call).
174 * ``conversion`` is an integer:
175
176 * -1: no formatting
177 * 115: ``!s`` string formatting
178 * 114: ``!r`` repr formatting
179 * 97: ``!a`` ascii formatting
180
181 * ``format_spec`` is a :class:`JoinedStr` node representing the formatting
182 of the value, or ``None`` if no format was specified. Both
183 ``conversion`` and ``format_spec`` can be set at the same time.
184
185
186.. class:: JoinedStr(values)
187
188 An f-string, comprising a series of :class:`FormattedValue` and :class:`Constant`
189 nodes.
190
191 .. doctest::
192
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000193 >>> print(ast.dump(ast.parse('f"sin({a}) is {sin(a):.3}"', mode='eval'), indent=4))
194 Expression(
195 body=JoinedStr(
196 values=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200197 Constant(value='sin('),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000198 FormattedValue(
199 value=Name(id='a', ctx=Load()),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200200 conversion=-1),
201 Constant(value=') is '),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000202 FormattedValue(
203 value=Call(
204 func=Name(id='sin', ctx=Load()),
205 args=[
206 Name(id='a', ctx=Load())],
207 keywords=[]),
208 conversion=-1,
209 format_spec=JoinedStr(
210 values=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200211 Constant(value='.3')]))]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000212
213
214.. class:: List(elts, ctx)
215 Tuple(elts, ctx)
216
217 A list or tuple. ``elts`` holds a list of nodes representing the elements.
218 ``ctx`` is :class:`Store` if the container is an assignment target (i.e.
219 ``(x,y)=something``), and :class:`Load` otherwise.
220
221 .. doctest::
222
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000223 >>> print(ast.dump(ast.parse('[1, 2, 3]', mode='eval'), indent=4))
224 Expression(
225 body=List(
226 elts=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200227 Constant(value=1),
228 Constant(value=2),
229 Constant(value=3)],
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000230 ctx=Load()))
231 >>> print(ast.dump(ast.parse('(1, 2, 3)', mode='eval'), indent=4))
232 Expression(
233 body=Tuple(
234 elts=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200235 Constant(value=1),
236 Constant(value=2),
237 Constant(value=3)],
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000238 ctx=Load()))
Pablo Galindo114081f2020-03-02 03:14:06 +0000239
240
241.. class:: Set(elts)
242
243 A set. ``elts`` holds a list of nodes representing the set's elements.
244
245 .. doctest::
246
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000247 >>> print(ast.dump(ast.parse('{1, 2, 3}', mode='eval'), indent=4))
248 Expression(
249 body=Set(
250 elts=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200251 Constant(value=1),
252 Constant(value=2),
253 Constant(value=3)]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000254
255
256.. class:: Dict(keys, values)
257
258 A dictionary. ``keys`` and ``values`` hold lists of nodes representing the
259 keys and the values respectively, in matching order (what would be returned
260 when calling :code:`dictionary.keys()` and :code:`dictionary.values()`).
261
262 When doing dictionary unpacking using dictionary literals the expression to be
263 expanded goes in the ``values`` list, with a ``None`` at the corresponding
264 position in ``keys``.
265
266 .. doctest::
267
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000268 >>> print(ast.dump(ast.parse('{"a":1, **d}', mode='eval'), indent=4))
269 Expression(
270 body=Dict(
271 keys=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200272 Constant(value='a'),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000273 None],
274 values=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200275 Constant(value=1),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000276 Name(id='d', ctx=Load())]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000277
278
279Variables
280^^^^^^^^^
281
282.. class:: Name(id, ctx)
283
284 A variable name. ``id`` holds the name as a string, and ``ctx`` is one of
285 the following types.
286
287
288.. class:: Load()
289 Store()
290 Del()
291
292 Variable references can be used to load the value of a variable, to assign
293 a new value to it, or to delete it. Variable references are given a context
294 to distinguish these cases.
295
296 .. doctest::
297
298 >>> print(ast.dump(ast.parse('a'), indent=4))
299 Module(
300 body=[
301 Expr(
302 value=Name(id='a', ctx=Load()))],
303 type_ignores=[])
304
305 >>> print(ast.dump(ast.parse('a = 1'), indent=4))
306 Module(
307 body=[
308 Assign(
309 targets=[
310 Name(id='a', ctx=Store())],
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200311 value=Constant(value=1))],
Pablo Galindo114081f2020-03-02 03:14:06 +0000312 type_ignores=[])
313
314 >>> print(ast.dump(ast.parse('del a'), indent=4))
315 Module(
316 body=[
317 Delete(
318 targets=[
319 Name(id='a', ctx=Del())])],
320 type_ignores=[])
321
322
323.. class:: Starred(value, ctx)
324
325 A ``*var`` variable reference. ``value`` holds the variable, typically a
326 :class:`Name` node. This type must be used when building a :class:`Call`
327 node with ``*args``.
328
329 .. doctest::
330
331 >>> print(ast.dump(ast.parse('a, *b = it'), indent=4))
332 Module(
333 body=[
334 Assign(
335 targets=[
336 Tuple(
337 elts=[
338 Name(id='a', ctx=Store()),
339 Starred(
340 value=Name(id='b', ctx=Store()),
341 ctx=Store())],
342 ctx=Store())],
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200343 value=Name(id='it', ctx=Load()))],
Pablo Galindo114081f2020-03-02 03:14:06 +0000344 type_ignores=[])
345
346
347Expressions
348^^^^^^^^^^^
349
350.. class:: Expr(value)
351
352 When an expression, such as a function call, appears as a statement by itself
353 with its return value not used or stored, it is wrapped in this container.
354 ``value`` holds one of the other nodes in this section, a :class:`Constant`, a
355 :class:`Name`, a :class:`Lambda`, a :class:`Yield` or :class:`YieldFrom` node.
356
357 .. doctest::
358
359 >>> print(ast.dump(ast.parse('-a'), indent=4))
360 Module(
361 body=[
362 Expr(
363 value=UnaryOp(
364 op=USub(),
365 operand=Name(id='a', ctx=Load())))],
366 type_ignores=[])
367
368
369.. class:: UnaryOp(op, operand)
370
371 A unary operation. ``op`` is the operator, and ``operand`` any expression
372 node.
373
374
375.. class:: UAdd
376 USub
377 Not
378 Invert
379
380 Unary operator tokens. :class:`Not` is the ``not`` keyword, :class:`Invert`
381 is the ``~`` operator.
382
383 .. doctest::
384
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000385 >>> print(ast.dump(ast.parse('not x', mode='eval'), indent=4))
386 Expression(
387 body=UnaryOp(
388 op=Not(),
389 operand=Name(id='x', ctx=Load())))
Pablo Galindo114081f2020-03-02 03:14:06 +0000390
391
392.. class:: BinOp(left, op, right)
393
394 A binary operation (like addition or division). ``op`` is the operator, and
395 ``left`` and ``right`` are any expression nodes.
396
397 .. doctest::
398
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000399 >>> print(ast.dump(ast.parse('x + y', mode='eval'), indent=4))
400 Expression(
401 body=BinOp(
402 left=Name(id='x', ctx=Load()),
403 op=Add(),
404 right=Name(id='y', ctx=Load())))
Pablo Galindo114081f2020-03-02 03:14:06 +0000405
406
407.. class:: Add
408 Sub
409 Mult
410 Div
411 FloorDiv
412 Mod
413 Pow
414 LShift
415 RShift
416 BitOr
417 BitXor
418 BitAnd
419 MatMult
420
421 Binary operator tokens.
422
423
424.. class:: BoolOp(op, values)
425
426 A boolean operation, 'or' or 'and'. ``op`` is :class:`Or` or :class:`And`.
427 ``values`` are the values involved. Consecutive operations with the same
428 operator, such as ``a or b or c``, are collapsed into one node with several
429 values.
430
431 This doesn't include ``not``, which is a :class:`UnaryOp`.
432
433 .. doctest::
434
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000435 >>> print(ast.dump(ast.parse('x or y', mode='eval'), indent=4))
436 Expression(
437 body=BoolOp(
438 op=Or(),
439 values=[
440 Name(id='x', ctx=Load()),
441 Name(id='y', ctx=Load())]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000442
443
444.. class:: And
445 Or
446
447 Boolean operator tokens.
448
449
450.. class:: Compare(left, ops, comparators)
451
452 A comparison of two or more values. ``left`` is the first value in the
453 comparison, ``ops`` the list of operators, and ``comparators`` the list
454 of values after the first element in the comparison.
455
456 .. doctest::
457
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000458 >>> print(ast.dump(ast.parse('1 <= a < 10', mode='eval'), indent=4))
459 Expression(
460 body=Compare(
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200461 left=Constant(value=1),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000462 ops=[
463 LtE(),
464 Lt()],
465 comparators=[
466 Name(id='a', ctx=Load()),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200467 Constant(value=10)]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000468
469
470.. class:: Eq
471 NotEq
472 Lt
473 LtE
474 Gt
475 GtE
476 Is
477 IsNot
478 In
479 NotIn
480
481 Comparison operator tokens.
482
483
484.. class:: Call(func, args, keywords, starargs, kwargs)
485
486 A function call. ``func`` is the function, which will often be a
487 :class:`Name` or :class:`Attribute` object. Of the arguments:
488
489 * ``args`` holds a list of the arguments passed by position.
490 * ``keywords`` holds a list of :class:`keyword` objects representing
491 arguments passed by keyword.
492
493 When creating a ``Call`` node, ``args`` and ``keywords`` are required, but
494 they can be empty lists. ``starargs`` and ``kwargs`` are optional.
495
496 .. doctest::
497
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000498 >>> print(ast.dump(ast.parse('func(a, b=c, *d, **e)', mode='eval'), indent=4))
499 Expression(
500 body=Call(
501 func=Name(id='func', ctx=Load()),
502 args=[
503 Name(id='a', ctx=Load()),
504 Starred(
505 value=Name(id='d', ctx=Load()),
506 ctx=Load())],
507 keywords=[
508 keyword(
509 arg='b',
510 value=Name(id='c', ctx=Load())),
511 keyword(
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000512 value=Name(id='e', ctx=Load()))]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000513
514
515.. class:: keyword(arg, value)
516
517 A keyword argument to a function call or class definition. ``arg`` is a raw
518 string of the parameter name, ``value`` is a node to pass in.
519
520
521.. class:: IfExp(test, body, orelse)
522
523 An expression such as ``a if b else c``. Each field holds a single node, so
524 in the following example, all three are :class:`Name` nodes.
525
526 .. doctest::
527
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000528 >>> print(ast.dump(ast.parse('a if b else c', mode='eval'), indent=4))
529 Expression(
530 body=IfExp(
531 test=Name(id='b', ctx=Load()),
532 body=Name(id='a', ctx=Load()),
533 orelse=Name(id='c', ctx=Load())))
Pablo Galindo114081f2020-03-02 03:14:06 +0000534
535
536.. class:: Attribute(value, attr, ctx)
537
538 Attribute access, e.g. ``d.keys``. ``value`` is a node, typically a
539 :class:`Name`. ``attr`` is a bare string giving the name of the attribute,
540 and ``ctx`` is :class:`Load`, :class:`Store` or :class:`Del` according to how
541 the attribute is acted on.
542
543 .. doctest::
544
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000545 >>> print(ast.dump(ast.parse('snake.colour', mode='eval'), indent=4))
546 Expression(
547 body=Attribute(
548 value=Name(id='snake', ctx=Load()),
549 attr='colour',
550 ctx=Load()))
Pablo Galindo114081f2020-03-02 03:14:06 +0000551
552
553.. class:: NamedExpr(target, value)
554
555 A named expression. This AST node is produced by the assignment expressions
556 operator (also known as the walrus operator). As opposed to the :class:`Assign`
557 node in which the first argument can be multiple nodes, in this case both
558 ``target`` and ``value`` must be single nodes.
559
560 .. doctest::
561
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000562 >>> print(ast.dump(ast.parse('(x := 4)', mode='eval'), indent=4))
563 Expression(
564 body=NamedExpr(
565 target=Name(id='x', ctx=Store()),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200566 value=Constant(value=4)))
Pablo Galindo114081f2020-03-02 03:14:06 +0000567
568
569Subscripting
570~~~~~~~~~~~~
571
572.. class:: Subscript(value, slice, ctx)
573
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200574 A subscript, such as ``l[1]``. ``value`` is the subscripted object
575 (usually sequence or mapping). ``slice`` is an index, slice or key.
576 It can be a :class:`Tuple` and contain a :class:`Slice`.
577 ``ctx`` is :class:`Load`, :class:`Store` or :class:`Del`
Pablo Galindo114081f2020-03-02 03:14:06 +0000578 according to the action performed with the subscript.
579
Pablo Galindo114081f2020-03-02 03:14:06 +0000580 .. doctest::
581
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200582 >>> print(ast.dump(ast.parse('l[1:2, 3]', mode='eval'), indent=4))
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000583 Expression(
584 body=Subscript(
585 value=Name(id='l', ctx=Load()),
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200586 slice=Tuple(
587 elts=[
588 Slice(
589 lower=Constant(value=1),
590 upper=Constant(value=2)),
591 Constant(value=3)],
592 ctx=Load()),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000593 ctx=Load()))
Pablo Galindo114081f2020-03-02 03:14:06 +0000594
595
596.. class:: Slice(lower, upper, step)
597
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200598 Regular slicing (on the form ``lower:upper`` or ``lower:upper:step``).
599 Can occur only inside the *slice* field of :class:`Subscript`, either
600 directly or as an element of :class:`Tuple`.
Pablo Galindo114081f2020-03-02 03:14:06 +0000601
602 .. doctest::
603
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000604 >>> print(ast.dump(ast.parse('l[1:2]', mode='eval'), indent=4))
605 Expression(
606 body=Subscript(
607 value=Name(id='l', ctx=Load()),
608 slice=Slice(
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200609 lower=Constant(value=1),
610 upper=Constant(value=2)),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000611 ctx=Load()))
Pablo Galindo114081f2020-03-02 03:14:06 +0000612
613
Pablo Galindo114081f2020-03-02 03:14:06 +0000614Comprehensions
615~~~~~~~~~~~~~~
616
617.. class:: ListComp(elt, generators)
618 SetComp(elt, generators)
619 GeneratorExp(elt, generators)
620 DictComp(key, value, generators)
621
622 List and set comprehensions, generator expressions, and dictionary
623 comprehensions. ``elt`` (or ``key`` and ``value``) is a single node
624 representing the part that will be evaluated for each item.
625
626 ``generators`` is a list of :class:`comprehension` nodes.
627
628 .. doctest::
629
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000630 >>> print(ast.dump(ast.parse('[x for x in numbers]', mode='eval'), indent=4))
631 Expression(
632 body=ListComp(
633 elt=Name(id='x', ctx=Load()),
634 generators=[
635 comprehension(
636 target=Name(id='x', ctx=Store()),
637 iter=Name(id='numbers', ctx=Load()),
638 ifs=[],
639 is_async=0)]))
640 >>> print(ast.dump(ast.parse('{x: x**2 for x in numbers}', mode='eval'), indent=4))
641 Expression(
642 body=DictComp(
643 key=Name(id='x', ctx=Load()),
644 value=BinOp(
645 left=Name(id='x', ctx=Load()),
646 op=Pow(),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200647 right=Constant(value=2)),
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000648 generators=[
649 comprehension(
650 target=Name(id='x', ctx=Store()),
651 iter=Name(id='numbers', ctx=Load()),
652 ifs=[],
653 is_async=0)]))
654 >>> print(ast.dump(ast.parse('{x for x in numbers}', mode='eval'), indent=4))
655 Expression(
656 body=SetComp(
657 elt=Name(id='x', ctx=Load()),
658 generators=[
659 comprehension(
660 target=Name(id='x', ctx=Store()),
661 iter=Name(id='numbers', ctx=Load()),
662 ifs=[],
663 is_async=0)]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000664
665
666.. class:: comprehension(target, iter, ifs, is_async)
667
668 One ``for`` clause in a comprehension. ``target`` is the reference to use for
669 each element - typically a :class:`Name` or :class:`Tuple` node. ``iter``
670 is the object to iterate over. ``ifs`` is a list of test expressions: each
671 ``for`` clause can have multiple ``ifs``.
672
673 ``is_async`` indicates a comprehension is asynchronous (using an
674 ``async for`` instead of ``for``). The value is an integer (0 or 1).
675
676 .. doctest::
677
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000678 >>> print(ast.dump(ast.parse('[ord(c) for line in file for c in line]', mode='eval'),
Pablo Galindo114081f2020-03-02 03:14:06 +0000679 ... indent=4)) # Multiple comprehensions in one.
680 Expression(
681 body=ListComp(
682 elt=Call(
683 func=Name(id='ord', ctx=Load()),
684 args=[
685 Name(id='c', ctx=Load())],
686 keywords=[]),
687 generators=[
688 comprehension(
689 target=Name(id='line', ctx=Store()),
690 iter=Name(id='file', ctx=Load()),
691 ifs=[],
692 is_async=0),
693 comprehension(
694 target=Name(id='c', ctx=Store()),
695 iter=Name(id='line', ctx=Load()),
696 ifs=[],
697 is_async=0)]))
698
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000699 >>> print(ast.dump(ast.parse('(n**2 for n in it if n>5 if n<10)', mode='eval'),
Pablo Galindo114081f2020-03-02 03:14:06 +0000700 ... indent=4)) # generator comprehension
701 Expression(
702 body=GeneratorExp(
703 elt=BinOp(
704 left=Name(id='n', ctx=Load()),
705 op=Pow(),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200706 right=Constant(value=2)),
Pablo Galindo114081f2020-03-02 03:14:06 +0000707 generators=[
708 comprehension(
709 target=Name(id='n', ctx=Store()),
710 iter=Name(id='it', ctx=Load()),
711 ifs=[
712 Compare(
713 left=Name(id='n', ctx=Load()),
714 ops=[
715 Gt()],
716 comparators=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200717 Constant(value=5)]),
Pablo Galindo114081f2020-03-02 03:14:06 +0000718 Compare(
719 left=Name(id='n', ctx=Load()),
720 ops=[
721 Lt()],
722 comparators=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200723 Constant(value=10)])],
Pablo Galindo114081f2020-03-02 03:14:06 +0000724 is_async=0)]))
725
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000726 >>> print(ast.dump(ast.parse('[i async for i in soc]', mode='eval'),
Pablo Galindo114081f2020-03-02 03:14:06 +0000727 ... indent=4)) # Async comprehension
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000728 Expression(
729 body=ListComp(
730 elt=Name(id='i', ctx=Load()),
731 generators=[
732 comprehension(
733 target=Name(id='i', ctx=Store()),
734 iter=Name(id='soc', ctx=Load()),
735 ifs=[],
736 is_async=1)]))
Pablo Galindo114081f2020-03-02 03:14:06 +0000737
738Statements
739^^^^^^^^^^
740
741.. class:: Assign(targets, value, type_comment)
742
743 An assignment. ``targets`` is a list of nodes, and ``value`` is a single node.
744
745 Multiple nodes in ``targets`` represents assigning the same value to each.
746 Unpacking is represented by putting a :class:`Tuple` or :class:`List`
747 within ``targets``.
748
749 .. attribute:: type_comment
750
751 ``type_comment`` is an optional string with the type annotation as a comment.
752
753 .. doctest::
754
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000755 >>> print(ast.dump(ast.parse('a = b = 1'), indent=4)) # Multiple assignment
Pablo Galindo114081f2020-03-02 03:14:06 +0000756 Module(
757 body=[
758 Assign(
759 targets=[
760 Name(id='a', ctx=Store()),
761 Name(id='b', ctx=Store())],
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200762 value=Constant(value=1))],
Pablo Galindo114081f2020-03-02 03:14:06 +0000763 type_ignores=[])
764
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000765 >>> print(ast.dump(ast.parse('a,b = c'), indent=4)) # Unpacking
Pablo Galindo114081f2020-03-02 03:14:06 +0000766 Module(
767 body=[
768 Assign(
769 targets=[
770 Tuple(
771 elts=[
772 Name(id='a', ctx=Store()),
773 Name(id='b', ctx=Store())],
774 ctx=Store())],
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200775 value=Name(id='c', ctx=Load()))],
Pablo Galindo114081f2020-03-02 03:14:06 +0000776 type_ignores=[])
777
778
779.. class:: AnnAssign(target, annotation, value, simple)
780
781 An assignment with a type annotation. ``target`` is a single node and can
782 be a :class:`Name`, a :class:`Attribute` or a :class:`Subscript`.
783 ``annotation`` is the annotation, such as a :class:`Constant` or :class:`Name`
784 node. ``value`` is a single optional node. ``simple`` is a boolean integer
785 set to True for a :class:`Name` node in ``target`` that do not appear in
786 between parenthesis and are hence pure names and not expressions.
787
788 .. doctest::
789
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000790 >>> print(ast.dump(ast.parse('c: int'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000791 Module(
792 body=[
793 AnnAssign(
794 target=Name(id='c', ctx=Store()),
795 annotation=Name(id='int', ctx=Load()),
Pablo Galindo114081f2020-03-02 03:14:06 +0000796 simple=1)],
797 type_ignores=[])
798
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000799 >>> print(ast.dump(ast.parse('(a): int = 1'), indent=4)) # Annotation with parenthesis
Pablo Galindo114081f2020-03-02 03:14:06 +0000800 Module(
801 body=[
802 AnnAssign(
803 target=Name(id='a', ctx=Store()),
804 annotation=Name(id='int', ctx=Load()),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200805 value=Constant(value=1),
Pablo Galindo114081f2020-03-02 03:14:06 +0000806 simple=0)],
807 type_ignores=[])
808
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000809 >>> print(ast.dump(ast.parse('a.b: int'), indent=4)) # Attribute annotation
Pablo Galindo114081f2020-03-02 03:14:06 +0000810 Module(
811 body=[
812 AnnAssign(
813 target=Attribute(
814 value=Name(id='a', ctx=Load()),
815 attr='b',
816 ctx=Store()),
817 annotation=Name(id='int', ctx=Load()),
Pablo Galindo114081f2020-03-02 03:14:06 +0000818 simple=0)],
819 type_ignores=[])
820
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000821 >>> print(ast.dump(ast.parse('a[1]: int'), indent=4)) # Subscript annotation
Pablo Galindo114081f2020-03-02 03:14:06 +0000822 Module(
823 body=[
824 AnnAssign(
825 target=Subscript(
826 value=Name(id='a', ctx=Load()),
Serhiy Storchaka13d52c22020-03-10 18:52:34 +0200827 slice=Constant(value=1),
Pablo Galindo114081f2020-03-02 03:14:06 +0000828 ctx=Store()),
829 annotation=Name(id='int', ctx=Load()),
Pablo Galindo114081f2020-03-02 03:14:06 +0000830 simple=0)],
831 type_ignores=[])
832
833
834.. class:: AugAssign(target, op, value)
835
836 Augmented assignment, such as ``a += 1``. In the following example,
837 ``target`` is a :class:`Name` node for ``x`` (with the :class:`Store`
838 context), ``op`` is :class:`Add`, and ``value`` is a :class:`Constant` with
839 value for 1.
840
Zackery Spytzf2b45362021-03-13 18:00:28 -0700841 The ``target`` attribute cannot be of class :class:`Tuple` or :class:`List`,
Pablo Galindo114081f2020-03-02 03:14:06 +0000842 unlike the targets of :class:`Assign`.
843
844 .. doctest::
845
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000846 >>> print(ast.dump(ast.parse('x += 2'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000847 Module(
848 body=[
849 AugAssign(
850 target=Name(id='x', ctx=Store()),
851 op=Add(),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200852 value=Constant(value=2))],
Pablo Galindo114081f2020-03-02 03:14:06 +0000853 type_ignores=[])
854
855
856.. class:: Raise(exc, cause)
857
858 A ``raise`` statement. ``exc`` is the exception object to be raised, normally a
859 :class:`Call` or :class:`Name`, or ``None`` for a standalone ``raise``.
860 ``cause`` is the optional part for ``y`` in ``raise x from y``.
861
862 .. doctest::
863
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000864 >>> print(ast.dump(ast.parse('raise x from y'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000865 Module(
866 body=[
867 Raise(
868 exc=Name(id='x', ctx=Load()),
869 cause=Name(id='y', ctx=Load()))],
870 type_ignores=[])
871
872
873.. class:: Assert(test, msg)
874
875 An assertion. ``test`` holds the condition, such as a :class:`Compare` node.
876 ``msg`` holds the failure message.
877
878 .. doctest::
879
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000880 >>> print(ast.dump(ast.parse('assert x,y'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000881 Module(
882 body=[
883 Assert(
884 test=Name(id='x', ctx=Load()),
885 msg=Name(id='y', ctx=Load()))],
886 type_ignores=[])
887
888
889.. class:: Delete(targets)
890
891 Represents a ``del`` statement. ``targets`` is a list of nodes, such as
892 :class:`Name`, :class:`Attribute` or :class:`Subscript` nodes.
893
894 .. doctest::
895
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000896 >>> print(ast.dump(ast.parse('del x,y,z'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000897 Module(
898 body=[
899 Delete(
900 targets=[
901 Name(id='x', ctx=Del()),
902 Name(id='y', ctx=Del()),
903 Name(id='z', ctx=Del())])],
904 type_ignores=[])
905
906
907.. class:: Pass()
908
909 A ``pass`` statement.
910
911 .. doctest::
912
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000913 >>> print(ast.dump(ast.parse('pass'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000914 Module(
915 body=[
916 Pass()],
917 type_ignores=[])
918
919
920Other statements which are only applicable inside functions or loops are
921described in other sections.
922
923Imports
924~~~~~~~
925
926.. class:: Import(names)
927
928 An import statement. ``names`` is a list of :class:`alias` nodes.
929
930 .. doctest::
931
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000932 >>> print(ast.dump(ast.parse('import x,y,z'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000933 Module(
934 body=[
935 Import(
936 names=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200937 alias(name='x'),
938 alias(name='y'),
939 alias(name='z')])],
Pablo Galindo114081f2020-03-02 03:14:06 +0000940 type_ignores=[])
941
942
943.. class:: ImportFrom(module, names, level)
944
945 Represents ``from x import y``. ``module`` is a raw string of the 'from' name,
946 without any leading dots, or ``None`` for statements such as ``from . import foo``.
947 ``level`` is an integer holding the level of the relative import (0 means
948 absolute import).
949
950 .. doctest::
951
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000952 >>> print(ast.dump(ast.parse('from y import x,y,z'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000953 Module(
954 body=[
955 ImportFrom(
956 module='y',
957 names=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200958 alias(name='x'),
959 alias(name='y'),
960 alias(name='z')],
Pablo Galindo114081f2020-03-02 03:14:06 +0000961 level=0)],
962 type_ignores=[])
963
964
965.. class:: alias(name, asname)
966
967 Both parameters are raw strings of the names. ``asname`` can be ``None`` if
968 the regular name is to be used.
969
970 .. doctest::
971
Pablo Galindo02f64cb2020-03-07 18:22:58 +0000972 >>> print(ast.dump(ast.parse('from ..foo.bar import a as b, c'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +0000973 Module(
974 body=[
975 ImportFrom(
976 module='foo.bar',
977 names=[
978 alias(name='a', asname='b'),
Serhiy Storchakab7e95252020-03-10 00:07:47 +0200979 alias(name='c')],
Pablo Galindo114081f2020-03-02 03:14:06 +0000980 level=2)],
981 type_ignores=[])
982
983Control flow
984^^^^^^^^^^^^
985
986.. note::
987 Optional clauses such as ``else`` are stored as an empty list if they're
988 not present.
989
990.. class:: If(test, body, orelse)
991
992 An ``if`` statement. ``test`` holds a single node, such as a :class:`Compare`
993 node. ``body`` and ``orelse`` each hold a list of nodes.
994
995 ``elif`` clauses don't have a special representation in the AST, but rather
996 appear as extra :class:`If` nodes within the ``orelse`` section of the
997 previous one.
998
999 .. doctest::
1000
1001 >>> print(ast.dump(ast.parse("""
1002 ... if x:
1003 ... ...
1004 ... elif y:
1005 ... ...
1006 ... else:
1007 ... ...
1008 ... """), indent=4))
1009 Module(
1010 body=[
1011 If(
1012 test=Name(id='x', ctx=Load()),
1013 body=[
1014 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001015 value=Constant(value=Ellipsis))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001016 orelse=[
1017 If(
1018 test=Name(id='y', ctx=Load()),
1019 body=[
1020 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001021 value=Constant(value=Ellipsis))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001022 orelse=[
1023 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001024 value=Constant(value=Ellipsis))])])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001025 type_ignores=[])
1026
1027
1028.. class:: For(target, iter, body, orelse, type_comment)
1029
1030 A ``for`` loop. ``target`` holds the variable(s) the loop assigns to, as a
1031 single :class:`Name`, :class:`Tuple` or :class:`List` node. ``iter`` holds
1032 the item to be looped over, again as a single node. ``body`` and ``orelse``
1033 contain lists of nodes to execute. Those in ``orelse`` are executed if the
1034 loop finishes normally, rather than via a ``break`` statement.
1035
1036 .. attribute:: type_comment
1037
1038 ``type_comment`` is an optional string with the type annotation as a comment.
1039
1040 .. doctest::
1041
1042 >>> print(ast.dump(ast.parse("""
1043 ... for x in y:
1044 ... ...
1045 ... else:
1046 ... ...
1047 ... """), indent=4))
1048 Module(
1049 body=[
1050 For(
1051 target=Name(id='x', ctx=Store()),
1052 iter=Name(id='y', ctx=Load()),
1053 body=[
1054 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001055 value=Constant(value=Ellipsis))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001056 orelse=[
1057 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001058 value=Constant(value=Ellipsis))])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001059 type_ignores=[])
1060
1061
1062.. class:: While(test, body, orelse)
1063
1064 A ``while`` loop. ``test`` holds the condition, such as a :class:`Compare`
1065 node.
1066
1067 .. doctest::
1068
1069 >> print(ast.dump(ast.parse("""
1070 ... while x:
1071 ... ...
1072 ... else:
1073 ... ...
1074 ... """), indent=4))
1075 Module(
1076 body=[
1077 While(
1078 test=Name(id='x', ctx=Load()),
1079 body=[
1080 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001081 value=Constant(value=Ellipsis))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001082 orelse=[
1083 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001084 value=Constant(value=Ellipsis))])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001085 type_ignores=[])
1086
1087
1088.. class:: Break
1089 Continue
1090
1091 The ``break`` and ``continue`` statements.
1092
1093 .. doctest::
1094
1095 >>> print(ast.dump(ast.parse("""\
1096 ... for a in b:
1097 ... if a > 5:
1098 ... break
1099 ... else:
1100 ... continue
1101 ...
1102 ... """), indent=4))
1103 Module(
1104 body=[
1105 For(
1106 target=Name(id='a', ctx=Store()),
1107 iter=Name(id='b', ctx=Load()),
1108 body=[
1109 If(
1110 test=Compare(
1111 left=Name(id='a', ctx=Load()),
1112 ops=[
1113 Gt()],
1114 comparators=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001115 Constant(value=5)]),
Pablo Galindo114081f2020-03-02 03:14:06 +00001116 body=[
1117 Break()],
1118 orelse=[
1119 Continue()])],
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001120 orelse=[])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001121 type_ignores=[])
1122
1123
1124.. class:: Try(body, handlers, orelse, finalbody)
1125
1126 ``try`` blocks. All attributes are list of nodes to execute, except for
1127 ``handlers``, which is a list of :class:`ExceptHandler` nodes.
1128
1129 .. doctest::
1130
1131 >>> print(ast.dump(ast.parse("""
1132 ... try:
1133 ... ...
1134 ... except Exception:
1135 ... ...
1136 ... except OtherException as e:
1137 ... ...
1138 ... else:
1139 ... ...
1140 ... finally:
1141 ... ...
1142 ... """), indent=4))
1143 Module(
1144 body=[
1145 Try(
1146 body=[
1147 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001148 value=Constant(value=Ellipsis))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001149 handlers=[
1150 ExceptHandler(
1151 type=Name(id='Exception', ctx=Load()),
Pablo Galindo114081f2020-03-02 03:14:06 +00001152 body=[
1153 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001154 value=Constant(value=Ellipsis))]),
Pablo Galindo114081f2020-03-02 03:14:06 +00001155 ExceptHandler(
1156 type=Name(id='OtherException', ctx=Load()),
1157 name='e',
1158 body=[
1159 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001160 value=Constant(value=Ellipsis))])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001161 orelse=[
1162 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001163 value=Constant(value=Ellipsis))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001164 finalbody=[
1165 Expr(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001166 value=Constant(value=Ellipsis))])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001167 type_ignores=[])
1168
1169
1170.. class:: ExceptHandler(type, name, body)
1171
1172 A single ``except`` clause. ``type`` is the exception type it will match,
1173 typically a :class:`Name` node (or ``None`` for a catch-all ``except:`` clause).
1174 ``name`` is a raw string for the name to hold the exception, or ``None`` if
1175 the clause doesn't have ``as foo``. ``body`` is a list of nodes.
1176
1177 .. doctest::
1178
1179 >>> print(ast.dump(ast.parse("""\
1180 ... try:
1181 ... a + 1
1182 ... except TypeError:
1183 ... pass
1184 ... """), indent=4))
1185 Module(
1186 body=[
1187 Try(
1188 body=[
1189 Expr(
1190 value=BinOp(
1191 left=Name(id='a', ctx=Load()),
1192 op=Add(),
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001193 right=Constant(value=1)))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001194 handlers=[
1195 ExceptHandler(
1196 type=Name(id='TypeError', ctx=Load()),
Pablo Galindo114081f2020-03-02 03:14:06 +00001197 body=[
1198 Pass()])],
1199 orelse=[],
1200 finalbody=[])],
1201 type_ignores=[])
1202
1203
1204.. class:: With(items, body, type_comment)
1205
1206 A ``with`` block. ``items`` is a list of :class:`withitem` nodes representing
1207 the context managers, and ``body`` is the indented block inside the context.
1208
1209 .. attribute:: type_comment
1210
1211 ``type_comment`` is an optional string with the type annotation as a comment.
1212
1213
1214.. class:: withitem(context_expr, optional_vars)
1215
1216 A single context manager in a ``with`` block. ``context_expr`` is the context
1217 manager, often a :class:`Call` node. ``optional_vars`` is a :class:`Name`,
1218 :class:`Tuple` or :class:`List` for the ``as foo`` part, or ``None`` if that
1219 isn't used.
1220
1221 .. doctest::
1222
1223 >>> print(ast.dump(ast.parse("""\
1224 ... with a as b, c as d:
1225 ... something(b, d)
1226 ... """), indent=4))
1227 Module(
1228 body=[
1229 With(
1230 items=[
1231 withitem(
1232 context_expr=Name(id='a', ctx=Load()),
1233 optional_vars=Name(id='b', ctx=Store())),
1234 withitem(
1235 context_expr=Name(id='c', ctx=Load()),
1236 optional_vars=Name(id='d', ctx=Store()))],
1237 body=[
1238 Expr(
1239 value=Call(
1240 func=Name(id='something', ctx=Load()),
1241 args=[
1242 Name(id='b', ctx=Load()),
1243 Name(id='d', ctx=Load())],
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001244 keywords=[]))])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001245 type_ignores=[])
1246
1247
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001248Pattern matching
1249^^^^^^^^^^^^^^^^
1250
1251
Pablo Galindoa8e26152021-03-01 02:08:37 +00001252.. class:: Match(subject, cases)
1253
1254 A ``match`` statement. ``subject`` holds the subject of the match (the object
1255 that is being matched against the cases) and ``cases`` contains an iterable of
1256 :class:`match_case` nodes with the different cases.
1257
Adrian Freund0a30f0e2021-03-10 16:58:31 +01001258.. class:: match_case(pattern, guard, body)
Pablo Galindoa8e26152021-03-01 02:08:37 +00001259
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001260 A single case pattern in a ``match`` statement. ``pattern`` contains the
1261 match pattern that the subject will be matched against. Note that the
1262 :class:`AST` nodes produced for patterns differ from those produced for
1263 expressions, even when they share the same syntax.
1264
1265 The ``guard`` attribute contains an expression that will be evaluated if
1266 the pattern matches the subject.
1267
1268 ``body`` contains a list of nodes to execute if the pattern matches and
Miss Islington (bot)72089f32021-10-02 12:32:56 -07001269 the result of evaluating the guard expression is true.
Pablo Galindoa8e26152021-03-01 02:08:37 +00001270
1271 .. doctest::
1272
1273 >>> print(ast.dump(ast.parse("""
1274 ... match x:
1275 ... case [x] if x>0:
1276 ... ...
1277 ... case tuple():
1278 ... ...
1279 ... """), indent=4))
1280 Module(
1281 body=[
1282 Match(
1283 subject=Name(id='x', ctx=Load()),
1284 cases=[
1285 match_case(
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001286 pattern=MatchSequence(
1287 patterns=[
1288 MatchAs(name='x')]),
Pablo Galindoa8e26152021-03-01 02:08:37 +00001289 guard=Compare(
1290 left=Name(id='x', ctx=Load()),
1291 ops=[
1292 Gt()],
1293 comparators=[
1294 Constant(value=0)]),
1295 body=[
1296 Expr(
1297 value=Constant(value=Ellipsis))]),
1298 match_case(
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001299 pattern=MatchClass(
1300 cls=Name(id='tuple', ctx=Load()),
1301 patterns=[],
1302 kwd_attrs=[],
1303 kwd_patterns=[]),
1304 body=[
1305 Expr(
1306 value=Constant(value=Ellipsis))])])],
1307 type_ignores=[])
1308
1309.. class:: MatchValue(value)
1310
1311 A match literal or value pattern that compares by equality. ``value`` is
1312 an expression node. Permitted value nodes are restricted as described in
1313 the match statement documentation. This pattern succeeds if the match
1314 subject is equal to the evaluated value.
1315
1316 .. doctest::
1317
1318 >>> print(ast.dump(ast.parse("""
1319 ... match x:
1320 ... case "Relevant":
1321 ... ...
1322 ... """), indent=4))
1323 Module(
1324 body=[
1325 Match(
1326 subject=Name(id='x', ctx=Load()),
1327 cases=[
1328 match_case(
1329 pattern=MatchValue(
1330 value=Constant(value='Relevant')),
1331 body=[
1332 Expr(
1333 value=Constant(value=Ellipsis))])])],
1334 type_ignores=[])
1335
1336.. class:: MatchSingleton(value)
1337
1338 A match literal pattern that compares by identity. ``value`` is the
1339 singleton to be compared against: ``None``, ``True``, or ``False``. This
1340 pattern succeeds if the match subject is the given constant.
1341
1342 .. doctest::
1343
1344 >>> print(ast.dump(ast.parse("""
1345 ... match x:
1346 ... case None:
1347 ... ...
1348 ... """), indent=4))
1349 Module(
1350 body=[
1351 Match(
1352 subject=Name(id='x', ctx=Load()),
1353 cases=[
1354 match_case(
1355 pattern=MatchSingleton(value=None),
1356 body=[
1357 Expr(
1358 value=Constant(value=Ellipsis))])])],
1359 type_ignores=[])
1360
1361.. class:: MatchSequence(patterns)
1362
1363 A match sequence pattern. ``patterns`` contains the patterns to be matched
1364 against the subject elements if the subject is a sequence. Matches a variable
1365 length sequence if one of the subpatterns is a ``MatchStar`` node, otherwise
1366 matches a fixed length sequence.
1367
1368 .. doctest::
1369
1370 >>> print(ast.dump(ast.parse("""
1371 ... match x:
1372 ... case [1, 2]:
1373 ... ...
1374 ... """), indent=4))
1375 Module(
1376 body=[
1377 Match(
1378 subject=Name(id='x', ctx=Load()),
1379 cases=[
1380 match_case(
1381 pattern=MatchSequence(
1382 patterns=[
1383 MatchValue(
1384 value=Constant(value=1)),
1385 MatchValue(
1386 value=Constant(value=2))]),
1387 body=[
1388 Expr(
1389 value=Constant(value=Ellipsis))])])],
1390 type_ignores=[])
1391
1392.. class:: MatchStar(name)
1393
1394 Matches the rest of the sequence in a variable length match sequence pattern.
1395 If ``name`` is not ``None``, a list containing the remaining sequence
1396 elements is bound to that name if the overall sequence pattern is successful.
1397
1398 .. doctest::
1399
1400 >>> print(ast.dump(ast.parse("""
1401 ... match x:
1402 ... case [1, 2, *rest]:
1403 ... ...
1404 ... case [*_]:
1405 ... ...
1406 ... """), indent=4))
1407 Module(
1408 body=[
1409 Match(
1410 subject=Name(id='x', ctx=Load()),
1411 cases=[
1412 match_case(
1413 pattern=MatchSequence(
1414 patterns=[
1415 MatchValue(
1416 value=Constant(value=1)),
1417 MatchValue(
1418 value=Constant(value=2)),
1419 MatchStar(name='rest')]),
1420 body=[
1421 Expr(
1422 value=Constant(value=Ellipsis))]),
1423 match_case(
1424 pattern=MatchSequence(
1425 patterns=[
1426 MatchStar()]),
1427 body=[
1428 Expr(
1429 value=Constant(value=Ellipsis))])])],
1430 type_ignores=[])
1431
1432.. class:: MatchMapping(keys, patterns, rest)
1433
1434 A match mapping pattern. ``keys`` is a sequence of expression nodes.
1435 ``patterns`` is a corresponding sequence of pattern nodes. ``rest`` is an
1436 optional name that can be specified to capture the remaining mapping elements.
1437 Permitted key expressions are restricted as described in the match statement
1438 documentation.
1439
1440 This pattern succeeds if the subject is a mapping, all evaluated key
1441 expressions are present in the mapping, and the value corresponding to each
1442 key matches the corresponding subpattern. If ``rest`` is not ``None``, a dict
1443 containing the remaining mapping elements is bound to that name if the overall
1444 mapping pattern is successful.
1445
1446 .. doctest::
1447
1448 >>> print(ast.dump(ast.parse("""
1449 ... match x:
1450 ... case {1: _, 2: _}:
1451 ... ...
1452 ... case {**rest}:
1453 ... ...
1454 ... """), indent=4))
1455 Module(
1456 body=[
1457 Match(
1458 subject=Name(id='x', ctx=Load()),
1459 cases=[
1460 match_case(
1461 pattern=MatchMapping(
1462 keys=[
1463 Constant(value=1),
1464 Constant(value=2)],
1465 patterns=[
1466 MatchAs(),
1467 MatchAs()]),
1468 body=[
1469 Expr(
1470 value=Constant(value=Ellipsis))]),
1471 match_case(
1472 pattern=MatchMapping(keys=[], patterns=[], rest='rest'),
1473 body=[
1474 Expr(
1475 value=Constant(value=Ellipsis))])])],
1476 type_ignores=[])
1477
1478.. class:: MatchClass(cls, patterns, kwd_attrs, kwd_patterns)
1479
1480 A match class pattern. ``cls`` is an expression giving the nominal class to
1481 be matched. ``patterns`` is a sequence of pattern nodes to be matched against
1482 the class defined sequence of pattern matching attributes. ``kwd_attrs`` is a
1483 sequence of additional attributes to be matched (specified as keyword arguments
1484 in the class pattern), ``kwd_patterns`` are the corresponding patterns
1485 (specified as keyword values in the class pattern).
1486
1487 This pattern succeeds if the subject is an instance of the nominated class,
1488 all positional patterns match the corresponding class-defined attributes, and
1489 any specified keyword attributes match their corresponding pattern.
1490
1491 Note: classes may define a property that returns self in order to match a
1492 pattern node against the instance being matched. Several builtin types are
1493 also matched that way, as described in the match statement documentation.
1494
1495 .. doctest::
1496
1497 >>> print(ast.dump(ast.parse("""
1498 ... match x:
1499 ... case Point2D(0, 0):
1500 ... ...
1501 ... case Point3D(x=0, y=0, z=0):
1502 ... ...
1503 ... """), indent=4))
1504 Module(
1505 body=[
1506 Match(
1507 subject=Name(id='x', ctx=Load()),
1508 cases=[
1509 match_case(
1510 pattern=MatchClass(
1511 cls=Name(id='Point2D', ctx=Load()),
1512 patterns=[
1513 MatchValue(
1514 value=Constant(value=0)),
1515 MatchValue(
1516 value=Constant(value=0))],
1517 kwd_attrs=[],
1518 kwd_patterns=[]),
1519 body=[
1520 Expr(
1521 value=Constant(value=Ellipsis))]),
1522 match_case(
1523 pattern=MatchClass(
1524 cls=Name(id='Point3D', ctx=Load()),
1525 patterns=[],
1526 kwd_attrs=[
1527 'x',
1528 'y',
1529 'z'],
1530 kwd_patterns=[
1531 MatchValue(
1532 value=Constant(value=0)),
1533 MatchValue(
1534 value=Constant(value=0)),
1535 MatchValue(
1536 value=Constant(value=0))]),
Pablo Galindoa8e26152021-03-01 02:08:37 +00001537 body=[
1538 Expr(
1539 value=Constant(value=Ellipsis))])])],
1540 type_ignores=[])
1541
1542.. class:: MatchAs(pattern, name)
1543
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001544 A match "as-pattern", capture pattern or wildcard pattern. ``pattern``
1545 contains the match pattern that the subject will be matched against.
1546 If the pattern is ``None``, the node represents a capture pattern (i.e a
1547 bare name) and will always succeed.
1548
1549 The ``name`` attribute contains the name that will be bound if the pattern
1550 is successful. If ``name`` is ``None``, ``pattern`` must also be ``None``
1551 and the node represents the wildcard pattern.
Pablo Galindoa8e26152021-03-01 02:08:37 +00001552
1553 .. doctest::
1554
1555 >>> print(ast.dump(ast.parse("""
1556 ... match x:
1557 ... case [x] as y:
1558 ... ...
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001559 ... case _:
1560 ... ...
Pablo Galindoa8e26152021-03-01 02:08:37 +00001561 ... """), indent=4))
1562 Module(
1563 body=[
1564 Match(
1565 subject=Name(id='x', ctx=Load()),
1566 cases=[
1567 match_case(
1568 pattern=MatchAs(
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001569 pattern=MatchSequence(
1570 patterns=[
1571 MatchAs(name='x')]),
Pablo Galindoa8e26152021-03-01 02:08:37 +00001572 name='y'),
1573 body=[
1574 Expr(
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001575 value=Constant(value=Ellipsis))]),
1576 match_case(
1577 pattern=MatchAs(),
1578 body=[
1579 Expr(
Pablo Galindoa8e26152021-03-01 02:08:37 +00001580 value=Constant(value=Ellipsis))])])],
1581 type_ignores=[])
1582
Pablo Galindoa8e26152021-03-01 02:08:37 +00001583.. class:: MatchOr(patterns)
1584
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001585 A match "or-pattern". An or-pattern matches each of its subpatterns in turn
1586 to the subject, until one succeeds. The or-pattern is then deemed to
1587 succeed. If none of the subpatterns succeed the or-pattern fails. The
1588 ``patterns`` attribute contains a list of match pattern nodes that will be
1589 matched against the subject.
Pablo Galindoa8e26152021-03-01 02:08:37 +00001590
1591 .. doctest::
1592
1593 >>> print(ast.dump(ast.parse("""
1594 ... match x:
1595 ... case [x] | (y):
1596 ... ...
1597 ... """), indent=4))
1598 Module(
1599 body=[
1600 Match(
1601 subject=Name(id='x', ctx=Load()),
1602 cases=[
1603 match_case(
1604 pattern=MatchOr(
1605 patterns=[
Nick Coghlan1e7b8582021-04-29 15:58:44 +10001606 MatchSequence(
1607 patterns=[
1608 MatchAs(name='x')]),
1609 MatchAs(name='y')]),
Pablo Galindoa8e26152021-03-01 02:08:37 +00001610 body=[
1611 Expr(
1612 value=Constant(value=Ellipsis))])])],
1613 type_ignores=[])
1614
1615
Pablo Galindo114081f2020-03-02 03:14:06 +00001616Function and class definitions
1617^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1618
1619.. class:: FunctionDef(name, args, body, decorator_list, returns, type_comment)
1620
1621 A function definition.
1622
1623 * ``name`` is a raw string of the function name.
Miss Islington (bot)12562792021-07-29 10:38:28 -07001624 * ``args`` is an :class:`arguments` node.
Pablo Galindo114081f2020-03-02 03:14:06 +00001625 * ``body`` is the list of nodes inside the function.
1626 * ``decorator_list`` is the list of decorators to be applied, stored outermost
1627 first (i.e. the first in the list will be applied last).
1628 * ``returns`` is the return annotation.
1629
1630 .. attribute:: type_comment
1631
1632 ``type_comment`` is an optional string with the type annotation as a comment.
1633
1634
1635.. class:: Lambda(args, body)
1636
1637 ``lambda`` is a minimal function definition that can be used inside an
1638 expression. Unlike :class:`FunctionDef`, ``body`` holds a single node.
1639
1640 .. doctest::
1641
Pablo Galindo02f64cb2020-03-07 18:22:58 +00001642 >>> print(ast.dump(ast.parse('lambda x,y: ...'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +00001643 Module(
1644 body=[
1645 Expr(
1646 value=Lambda(
1647 args=arguments(
1648 posonlyargs=[],
1649 args=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001650 arg(arg='x'),
1651 arg(arg='y')],
Pablo Galindo114081f2020-03-02 03:14:06 +00001652 kwonlyargs=[],
1653 kw_defaults=[],
Pablo Galindo114081f2020-03-02 03:14:06 +00001654 defaults=[]),
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001655 body=Constant(value=Ellipsis)))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001656 type_ignores=[])
1657
1658
1659.. class:: arguments(posonlyargs, args, vararg, kwonlyargs, kw_defaults, kwarg, defaults)
1660
1661 The arguments for a function.
1662
1663 * ``posonlyargs``, ``args`` and ``kwonlyargs`` are lists of :class:`arg` nodes.
1664 * ``vararg`` and ``kwarg`` are single :class:`arg` nodes, referring to the
1665 ``*args, **kwargs`` parameters.
1666 * ``kw_defaults`` is a list of default values for keyword-only arguments. If
1667 one is ``None``, the corresponding argument is required.
1668 * ``defaults`` is a list of default values for arguments that can be passed
1669 positionally. If there are fewer defaults, they correspond to the last n
1670 arguments.
1671
1672
1673.. class:: arg(arg, annotation, type_comment)
1674
1675 A single argument in a list. ``arg`` is a raw string of the argument
1676 name, ``annotation`` is its annotation, such as a :class:`Str` or
1677 :class:`Name` node.
1678
1679 .. attribute:: type_comment
1680
1681 ``type_comment`` is an optional string with the type annotation as a comment
1682
1683 .. doctest::
1684
1685 >>> print(ast.dump(ast.parse("""\
1686 ... @decorator1
1687 ... @decorator2
1688 ... def f(a: 'annotation', b=1, c=2, *d, e, f=3, **g) -> 'return annotation':
1689 ... pass
1690 ... """), indent=4))
1691 Module(
1692 body=[
1693 FunctionDef(
1694 name='f',
1695 args=arguments(
1696 posonlyargs=[],
1697 args=[
1698 arg(
1699 arg='a',
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001700 annotation=Constant(value='annotation')),
1701 arg(arg='b'),
1702 arg(arg='c')],
1703 vararg=arg(arg='d'),
Pablo Galindo114081f2020-03-02 03:14:06 +00001704 kwonlyargs=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001705 arg(arg='e'),
1706 arg(arg='f')],
Pablo Galindo114081f2020-03-02 03:14:06 +00001707 kw_defaults=[
1708 None,
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001709 Constant(value=3)],
1710 kwarg=arg(arg='g'),
Pablo Galindo114081f2020-03-02 03:14:06 +00001711 defaults=[
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001712 Constant(value=1),
1713 Constant(value=2)]),
Pablo Galindo114081f2020-03-02 03:14:06 +00001714 body=[
1715 Pass()],
1716 decorator_list=[
1717 Name(id='decorator1', ctx=Load()),
1718 Name(id='decorator2', ctx=Load())],
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001719 returns=Constant(value='return annotation'))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001720 type_ignores=[])
1721
1722
1723.. class:: Return(value)
1724
1725 A ``return`` statement.
1726
1727 .. doctest::
1728
Pablo Galindo02f64cb2020-03-07 18:22:58 +00001729 >>> print(ast.dump(ast.parse('return 4'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +00001730 Module(
1731 body=[
1732 Return(
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001733 value=Constant(value=4))],
Pablo Galindo114081f2020-03-02 03:14:06 +00001734 type_ignores=[])
1735
1736
1737.. class:: Yield(value)
1738 YieldFrom(value)
1739
1740 A ``yield`` or ``yield from`` expression. Because these are expressions, they
1741 must be wrapped in a :class:`Expr` node if the value sent back is not used.
1742
1743 .. doctest::
1744
Pablo Galindo02f64cb2020-03-07 18:22:58 +00001745 >>> print(ast.dump(ast.parse('yield x'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +00001746 Module(
1747 body=[
1748 Expr(
1749 value=Yield(
1750 value=Name(id='x', ctx=Load())))],
1751 type_ignores=[])
1752
Pablo Galindo02f64cb2020-03-07 18:22:58 +00001753 >>> print(ast.dump(ast.parse('yield from x'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +00001754 Module(
1755 body=[
1756 Expr(
1757 value=YieldFrom(
1758 value=Name(id='x', ctx=Load())))],
1759 type_ignores=[])
1760
1761
1762.. class:: Global(names)
1763 Nonlocal(names)
1764
1765 ``global`` and ``nonlocal`` statements. ``names`` is a list of raw strings.
1766
1767 .. doctest::
1768
Pablo Galindo02f64cb2020-03-07 18:22:58 +00001769 >>> print(ast.dump(ast.parse('global x,y,z'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +00001770 Module(
1771 body=[
1772 Global(
1773 names=[
1774 'x',
1775 'y',
1776 'z'])],
1777 type_ignores=[])
1778
Pablo Galindo02f64cb2020-03-07 18:22:58 +00001779 >>> print(ast.dump(ast.parse('nonlocal x,y,z'), indent=4))
Pablo Galindo114081f2020-03-02 03:14:06 +00001780 Module(
1781 body=[
1782 Nonlocal(
1783 names=[
1784 'x',
1785 'y',
1786 'z'])],
1787 type_ignores=[])
1788
1789
1790.. class:: ClassDef(name, bases, keywords, starargs, kwargs, body, decorator_list)
1791
1792 A class definition.
1793
1794 * ``name`` is a raw string for the class name
1795 * ``bases`` is a list of nodes for explicitly specified base classes.
1796 * ``keywords`` is a list of :class:`keyword` nodes, principally for 'metaclass'.
1797 Other keywords will be passed to the metaclass, as per `PEP-3115
Miss Islington (bot)f7f1c262021-07-30 07:25:28 -07001798 <https://www.python.org/dev/peps/pep-3115/>`_.
Pablo Galindo114081f2020-03-02 03:14:06 +00001799 * ``starargs`` and ``kwargs`` are each a single node, as in a function call.
1800 starargs will be expanded to join the list of base classes, and kwargs will
1801 be passed to the metaclass.
1802 * ``body`` is a list of nodes representing the code within the class
1803 definition.
1804 * ``decorator_list`` is a list of nodes, as in :class:`FunctionDef`.
1805
1806 .. doctest::
1807
1808 >>> print(ast.dump(ast.parse("""\
1809 ... @decorator1
1810 ... @decorator2
1811 ... class Foo(base1, base2, metaclass=meta):
1812 ... pass
1813 ... """), indent=4))
1814 Module(
1815 body=[
1816 ClassDef(
1817 name='Foo',
1818 bases=[
1819 Name(id='base1', ctx=Load()),
1820 Name(id='base2', ctx=Load())],
1821 keywords=[
1822 keyword(
1823 arg='metaclass',
1824 value=Name(id='meta', ctx=Load()))],
1825 body=[
1826 Pass()],
1827 decorator_list=[
1828 Name(id='decorator1', ctx=Load()),
1829 Name(id='decorator2', ctx=Load())])],
1830 type_ignores=[])
1831
1832Async and await
1833^^^^^^^^^^^^^^^
1834
1835.. class:: AsyncFunctionDef(name, args, body, decorator_list, returns, type_comment)
1836
1837 An ``async def`` function definition. Has the same fields as
1838 :class:`FunctionDef`.
1839
1840
1841.. class:: Await(value)
1842
1843 An ``await`` expression. ``value`` is what it waits for.
1844 Only valid in the body of an :class:`AsyncFunctionDef`.
1845
1846.. doctest::
1847
1848 >>> print(ast.dump(ast.parse("""\
1849 ... async def f():
1850 ... await other_func()
1851 ... """), indent=4))
1852 Module(
1853 body=[
1854 AsyncFunctionDef(
1855 name='f',
1856 args=arguments(
1857 posonlyargs=[],
1858 args=[],
Pablo Galindo114081f2020-03-02 03:14:06 +00001859 kwonlyargs=[],
1860 kw_defaults=[],
Pablo Galindo114081f2020-03-02 03:14:06 +00001861 defaults=[]),
1862 body=[
1863 Expr(
1864 value=Await(
1865 value=Call(
1866 func=Name(id='other_func', ctx=Load()),
1867 args=[],
1868 keywords=[])))],
Serhiy Storchakab7e95252020-03-10 00:07:47 +02001869 decorator_list=[])],
Pablo Galindo114081f2020-03-02 03:14:06 +00001870 type_ignores=[])
1871
1872
1873.. class:: AsyncFor(target, iter, body, orelse, type_comment)
1874 AsyncWith(items, body, type_comment)
1875
1876 ``async for`` loops and ``async with`` context managers. They have the same
1877 fields as :class:`For` and :class:`With`, respectively. Only valid in the
1878 body of an :class:`AsyncFunctionDef`.
Georg Brandl0c77a822008-06-10 16:37:50 +00001879
Batuhan Taskayab37c9942020-10-22 19:02:43 +03001880.. note::
1881 When a string is parsed by :func:`ast.parse`, operator nodes (subclasses
1882 of :class:`ast.operator`, :class:`ast.unaryop`, :class:`ast.cmpop`,
1883 :class:`ast.boolop` and :class:`ast.expr_context`) on the returned tree
1884 will be singletons. Changes to one will be reflected in all other
1885 occurrences of the same value (e.g. :class:`ast.Add`).
1886
Georg Brandl0c77a822008-06-10 16:37:50 +00001887
1888:mod:`ast` Helpers
1889------------------
1890
Martin Panter2e4571a2015-11-14 01:07:43 +00001891Apart from the node classes, the :mod:`ast` module defines these utility functions
Georg Brandl0c77a822008-06-10 16:37:50 +00001892and classes for traversing abstract syntax trees:
1893
Guido van Rossum10b55c12019-06-11 17:23:12 -07001894.. function:: parse(source, filename='<unknown>', mode='exec', *, type_comments=False, feature_version=None)
Georg Brandl0c77a822008-06-10 16:37:50 +00001895
Terry Reedyfeac6242011-01-24 21:36:03 +00001896 Parse the source into an AST node. Equivalent to ``compile(source,
Benjamin Petersonec9199b2008-11-08 17:05:00 +00001897 filename, mode, ast.PyCF_ONLY_AST)``.
Georg Brandl0c77a822008-06-10 16:37:50 +00001898
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001899 If ``type_comments=True`` is given, the parser is modified to check
1900 and return type comments as specified by :pep:`484` and :pep:`526`.
1901 This is equivalent to adding :data:`ast.PyCF_TYPE_COMMENTS` to the
1902 flags passed to :func:`compile()`. This will report syntax errors
1903 for misplaced type comments. Without this flag, type comments will
1904 be ignored, and the ``type_comment`` field on selected AST nodes
1905 will always be ``None``. In addition, the locations of ``# type:
1906 ignore`` comments will be returned as the ``type_ignores``
1907 attribute of :class:`Module` (otherwise it is always an empty list).
1908
1909 In addition, if ``mode`` is ``'func_type'``, the input syntax is
1910 modified to correspond to :pep:`484` "signature type comments",
1911 e.g. ``(str, int) -> List[str]``.
1912
Guido van Rossum10b55c12019-06-11 17:23:12 -07001913 Also, setting ``feature_version`` to a tuple ``(major, minor)``
1914 will attempt to parse using that Python version's grammar.
1915 Currently ``major`` must equal to ``3``. For example, setting
1916 ``feature_version=(3, 4)`` will allow the use of ``async`` and
1917 ``await`` as variable names. The lowest supported version is
1918 ``(3, 4)``; the highest is ``sys.version_info[0:2]``.
Guido van Rossum495da292019-03-07 12:38:08 -08001919
Miss Islington (bot)f17c9792021-09-19 16:07:16 -07001920 If source contains a null character ('\0'), :exc:`ValueError` is raised.
1921
1922 .. warning::
1923 Note that succesfully parsing souce code into an AST object doesn't
1924 guarantee that the source code provided is valid Python code that can
1925 be executed as the compilation step can raise further :exc:`SyntaxError`
1926 exceptions. For instance, the source ``return 42`` generates a valid
1927 AST node for a return statement, but it cannot be compiled alone (it needs
1928 to be inside a function node).
1929
1930 In particular, :func:`ast.parse` won't do any scoping checks, which the
1931 compilation step does.
1932
Brett Cannon7a7f1002018-03-09 12:03:22 -08001933 .. warning::
1934 It is possible to crash the Python interpreter with a
1935 sufficiently large/complex string due to stack depth limitations
1936 in Python's AST compiler.
1937
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001938 .. versionchanged:: 3.8
Guido van Rossum495da292019-03-07 12:38:08 -08001939 Added ``type_comments``, ``mode='func_type'`` and ``feature_version``.
Guido van Rossumdcfcd142019-01-31 03:40:27 -08001940
Georg Brandl48310cd2009-01-03 21:18:54 +00001941
Pablo Galindo27fc3b62019-11-24 23:02:40 +00001942.. function:: unparse(ast_obj)
1943
1944 Unparse an :class:`ast.AST` object and generate a string with code
1945 that would produce an equivalent :class:`ast.AST` object if parsed
1946 back with :func:`ast.parse`.
1947
1948 .. warning::
Gurupad Hegde6c7bb382019-12-28 17:16:02 -05001949 The produced code string will not necessarily be equal to the original
Batuhan Taskaya8df10162020-06-28 04:11:43 +03001950 code that generated the :class:`ast.AST` object (without any compiler
1951 optimizations, such as constant tuples/frozensets).
1952
1953 .. warning::
1954 Trying to unparse a highly complex expression would result with
1955 :exc:`RecursionError`.
Pablo Galindo27fc3b62019-11-24 23:02:40 +00001956
1957 .. versionadded:: 3.9
1958
1959
Georg Brandl0c77a822008-06-10 16:37:50 +00001960.. function:: literal_eval(node_or_string)
1961
Georg Brandlb9b389e2014-11-05 20:20:28 +01001962 Safely evaluate an expression node or a string containing a Python literal or
1963 container display. The string or node provided may only consist of the
1964 following Python literal structures: strings, bytes, numbers, tuples, lists,
Batuhan Taskayafbc77232020-12-22 03:15:40 +03001965 dicts, sets, booleans, ``None`` and ``Ellipsis``.
Georg Brandl0c77a822008-06-10 16:37:50 +00001966
Georg Brandlb9b389e2014-11-05 20:20:28 +01001967 This can be used for safely evaluating strings containing Python values from
1968 untrusted sources without the need to parse the values oneself. It is not
1969 capable of evaluating arbitrarily complex expressions, for example involving
1970 operators or indexing.
Georg Brandl0c77a822008-06-10 16:37:50 +00001971
Brett Cannon7a7f1002018-03-09 12:03:22 -08001972 .. warning::
1973 It is possible to crash the Python interpreter with a
1974 sufficiently large/complex string due to stack depth limitations
1975 in Python's AST compiler.
1976
Batuhan Taskayafbc77232020-12-22 03:15:40 +03001977 It can raise :exc:`ValueError`, :exc:`TypeError`, :exc:`SyntaxError`,
1978 :exc:`MemoryError` and :exc:`RecursionError` depending on the malformed
1979 input.
1980
Georg Brandl492f3fc2010-07-11 09:41:21 +00001981 .. versionchanged:: 3.2
Georg Brandl85f21772010-07-13 06:38:10 +00001982 Now allows bytes and set literals.
Georg Brandl492f3fc2010-07-11 09:41:21 +00001983
Raymond Hettinger4fcf5c12020-01-02 22:21:18 -07001984 .. versionchanged:: 3.9
1985 Now supports creating empty sets with ``'set()'``.
1986
Batuhan Taskayae799aa82020-10-04 03:46:44 +03001987 .. versionchanged:: 3.10
1988 For string inputs, leading spaces and tabs are now stripped.
1989
Georg Brandl0c77a822008-06-10 16:37:50 +00001990
Amaury Forgeot d'Arcfdfe62d2008-06-17 20:36:03 +00001991.. function:: get_docstring(node, clean=True)
Georg Brandl0c77a822008-06-10 16:37:50 +00001992
1993 Return the docstring of the given *node* (which must be a
INADA Naokicb41b272017-02-23 00:31:59 +09001994 :class:`FunctionDef`, :class:`AsyncFunctionDef`, :class:`ClassDef`,
1995 or :class:`Module` node), or ``None`` if it has no docstring.
1996 If *clean* is true, clean up the docstring's indentation with
1997 :func:`inspect.cleandoc`.
1998
1999 .. versionchanged:: 3.5
2000 :class:`AsyncFunctionDef` is now supported.
2001
Georg Brandl0c77a822008-06-10 16:37:50 +00002002
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002003.. function:: get_source_segment(source, node, *, padded=False)
2004
2005 Get source code segment of the *source* that generated *node*.
2006 If some location information (:attr:`lineno`, :attr:`end_lineno`,
2007 :attr:`col_offset`, or :attr:`end_col_offset`) is missing, return ``None``.
2008
2009 If *padded* is ``True``, the first line of a multi-line statement will
2010 be padded with spaces to match its original position.
2011
2012 .. versionadded:: 3.8
2013
2014
Georg Brandl0c77a822008-06-10 16:37:50 +00002015.. function:: fix_missing_locations(node)
2016
2017 When you compile a node tree with :func:`compile`, the compiler expects
2018 :attr:`lineno` and :attr:`col_offset` attributes for every node that supports
2019 them. This is rather tedious to fill in for generated nodes, so this helper
2020 adds these attributes recursively where not already set, by setting them to
2021 the values of the parent node. It works recursively starting at *node*.
2022
2023
2024.. function:: increment_lineno(node, n=1)
2025
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002026 Increment the line number and end line number of each node in the tree
2027 starting at *node* by *n*. This is useful to "move code" to a different
2028 location in a file.
Georg Brandl0c77a822008-06-10 16:37:50 +00002029
2030
2031.. function:: copy_location(new_node, old_node)
2032
Ivan Levkivskyi9932a222019-01-22 11:18:22 +00002033 Copy source location (:attr:`lineno`, :attr:`col_offset`, :attr:`end_lineno`,
2034 and :attr:`end_col_offset`) from *old_node* to *new_node* if possible,
2035 and return *new_node*.
Georg Brandl0c77a822008-06-10 16:37:50 +00002036
2037
2038.. function:: iter_fields(node)
2039
2040 Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields``
2041 that is present on *node*.
2042
2043
2044.. function:: iter_child_nodes(node)
2045
2046 Yield all direct child nodes of *node*, that is, all fields that are nodes
2047 and all items of fields that are lists of nodes.
2048
2049
2050.. function:: walk(node)
2051
Georg Brandl619e7ba2011-01-09 07:38:51 +00002052 Recursively yield all descendant nodes in the tree starting at *node*
2053 (including *node* itself), in no specified order. This is useful if you only
2054 want to modify nodes in place and don't care about the context.
Georg Brandl0c77a822008-06-10 16:37:50 +00002055
2056
2057.. class:: NodeVisitor()
2058
2059 A node visitor base class that walks the abstract syntax tree and calls a
2060 visitor function for every node found. This function may return a value
Georg Brandl36ab1ef2009-01-03 21:17:04 +00002061 which is forwarded by the :meth:`visit` method.
Georg Brandl0c77a822008-06-10 16:37:50 +00002062
2063 This class is meant to be subclassed, with the subclass adding visitor
2064 methods.
2065
2066 .. method:: visit(node)
2067
2068 Visit a node. The default implementation calls the method called
2069 :samp:`self.visit_{classname}` where *classname* is the name of the node
2070 class, or :meth:`generic_visit` if that method doesn't exist.
2071
2072 .. method:: generic_visit(node)
2073
2074 This visitor calls :meth:`visit` on all children of the node.
Georg Brandl48310cd2009-01-03 21:18:54 +00002075
Georg Brandl0c77a822008-06-10 16:37:50 +00002076 Note that child nodes of nodes that have a custom visitor method won't be
2077 visited unless the visitor calls :meth:`generic_visit` or visits them
2078 itself.
2079
2080 Don't use the :class:`NodeVisitor` if you want to apply changes to nodes
2081 during traversal. For this a special visitor exists
2082 (:class:`NodeTransformer`) that allows modifications.
2083
Serhiy Storchakac3ea41e2019-08-26 10:13:19 +03002084 .. deprecated:: 3.8
2085
2086 Methods :meth:`visit_Num`, :meth:`visit_Str`, :meth:`visit_Bytes`,
2087 :meth:`visit_NameConstant` and :meth:`visit_Ellipsis` are deprecated
2088 now and will not be called in future Python versions. Add the
2089 :meth:`visit_Constant` method to handle all constant nodes.
2090
Georg Brandl0c77a822008-06-10 16:37:50 +00002091
2092.. class:: NodeTransformer()
2093
2094 A :class:`NodeVisitor` subclass that walks the abstract syntax tree and
2095 allows modification of nodes.
2096
Georg Brandl36ab1ef2009-01-03 21:17:04 +00002097 The :class:`NodeTransformer` will walk the AST and use the return value of
2098 the visitor methods to replace or remove the old node. If the return value
2099 of the visitor method is ``None``, the node will be removed from its
2100 location, otherwise it is replaced with the return value. The return value
2101 may be the original node in which case no replacement takes place.
Georg Brandl0c77a822008-06-10 16:37:50 +00002102
2103 Here is an example transformer that rewrites all occurrences of name lookups
2104 (``foo``) to ``data['foo']``::
2105
2106 class RewriteName(NodeTransformer):
2107
2108 def visit_Name(self, node):
Batuhan Taşkaya6680f4a2020-01-12 23:38:53 +03002109 return Subscript(
Georg Brandl0c77a822008-06-10 16:37:50 +00002110 value=Name(id='data', ctx=Load()),
Serhiy Storchaka13d52c22020-03-10 18:52:34 +02002111 slice=Constant(value=node.id),
Georg Brandl0c77a822008-06-10 16:37:50 +00002112 ctx=node.ctx
Pablo Galindoc00c86b2020-03-12 00:48:19 +00002113 )
Georg Brandl0c77a822008-06-10 16:37:50 +00002114
2115 Keep in mind that if the node you're operating on has child nodes you must
2116 either transform the child nodes yourself or call the :meth:`generic_visit`
2117 method for the node first.
2118
2119 For nodes that were part of a collection of statements (that applies to all
2120 statement nodes), the visitor may also return a list of nodes rather than
2121 just a single node.
2122
Batuhan Taşkaya6680f4a2020-01-12 23:38:53 +03002123 If :class:`NodeTransformer` introduces new nodes (that weren't part of
2124 original tree) without giving them location information (such as
2125 :attr:`lineno`), :func:`fix_missing_locations` should be called with
2126 the new sub-tree to recalculate the location information::
2127
2128 tree = ast.parse('foo', mode='eval')
2129 new_tree = fix_missing_locations(RewriteName().visit(tree))
2130
Georg Brandl0c77a822008-06-10 16:37:50 +00002131 Usually you use the transformer like this::
2132
2133 node = YourTransformer().visit(node)
2134
2135
Serhiy Storchaka850573b2019-09-09 19:33:13 +03002136.. function:: dump(node, annotate_fields=True, include_attributes=False, *, indent=None)
Georg Brandl0c77a822008-06-10 16:37:50 +00002137
2138 Return a formatted dump of the tree in *node*. This is mainly useful for
Serhiy Storchakae64f9482019-08-29 09:30:23 +03002139 debugging purposes. If *annotate_fields* is true (by default),
2140 the returned string will show the names and the values for fields.
2141 If *annotate_fields* is false, the result string will be more compact by
2142 omitting unambiguous field names. Attributes such as line
Benjamin Petersondcf97b92008-07-02 17:30:14 +00002143 numbers and column offsets are not dumped by default. If this is wanted,
Serhiy Storchakae64f9482019-08-29 09:30:23 +03002144 *include_attributes* can be set to true.
Senthil Kumaranf3695bf2016-01-06 21:26:53 -08002145
Serhiy Storchaka850573b2019-09-09 19:33:13 +03002146 If *indent* is a non-negative integer or string, then the tree will be
2147 pretty-printed with that indent level. An indent level
2148 of 0, negative, or ``""`` will only insert newlines. ``None`` (the default)
2149 selects the single line representation. Using a positive integer indent
2150 indents that many spaces per level. If *indent* is a string (such as ``"\t"``),
2151 that string is used to indent each level.
2152
2153 .. versionchanged:: 3.9
2154 Added the *indent* option.
2155
2156
Batuhan Taskaya15593892020-10-19 04:14:11 +03002157.. _ast-compiler-flags:
2158
2159Compiler Flags
2160--------------
2161
2162The following flags may be passed to :func:`compile` in order to change
2163effects on the compilation of a program:
2164
2165.. data:: PyCF_ALLOW_TOP_LEVEL_AWAIT
2166
2167 Enables support for top-level ``await``, ``async for``, ``async with``
2168 and async comprehensions.
2169
2170 .. versionadded:: 3.8
2171
2172.. data:: PyCF_ONLY_AST
2173
2174 Generates and returns an abstract syntax tree instead of returning a
2175 compiled code object.
2176
2177.. data:: PyCF_TYPE_COMMENTS
2178
2179 Enables support for :pep:`484` and :pep:`526` style type comments
2180 (``# type: <type>``, ``# type: ignore <stuff>``).
2181
2182 .. versionadded:: 3.8
2183
2184
Serhiy Storchaka832e8642019-09-09 23:36:13 +03002185.. _ast-cli:
2186
2187Command-Line Usage
2188------------------
2189
2190.. versionadded:: 3.9
2191
2192The :mod:`ast` module can be executed as a script from the command line.
2193It is as simple as:
2194
2195.. code-block:: sh
2196
2197 python -m ast [-m <mode>] [-a] [infile]
2198
2199The following options are accepted:
2200
2201.. program:: ast
2202
2203.. cmdoption:: -h, --help
2204
2205 Show the help message and exit.
2206
2207.. cmdoption:: -m <mode>
2208 --mode <mode>
2209
2210 Specify what kind of code must be compiled, like the *mode* argument
2211 in :func:`parse`.
2212
Batuhan Taşkaya814d6872019-12-16 21:23:27 +03002213.. cmdoption:: --no-type-comments
2214
2215 Don't parse type comments.
2216
Serhiy Storchaka832e8642019-09-09 23:36:13 +03002217.. cmdoption:: -a, --include-attributes
2218
2219 Include attributes such as line numbers and column offsets.
2220
Batuhan Taşkaya814d6872019-12-16 21:23:27 +03002221.. cmdoption:: -i <indent>
2222 --indent <indent>
2223
2224 Indentation of nodes in AST (number of spaces).
2225
Serhiy Storchaka832e8642019-09-09 23:36:13 +03002226If :file:`infile` is specified its contents are parsed to AST and dumped
2227to stdout. Otherwise, the content is read from stdin.
2228
2229
Senthil Kumaranf3695bf2016-01-06 21:26:53 -08002230.. seealso::
2231
Edward K. Reame3c971c2020-08-11 09:07:49 -05002232 `Green Tree Snakes <https://greentreesnakes.readthedocs.io/>`_, an external
2233 documentation resource, has good details on working with Python ASTs.
2234
2235 `ASTTokens <https://asttokens.readthedocs.io/en/latest/user-guide.html>`_
2236 annotates Python ASTs with the positions of tokens and text in the source
2237 code that generated them. This is helpful for tools that make source code
2238 transformations.
2239
2240 `leoAst.py <http://leoeditor.com/appendices.html#leoast-py>`_ unifies the
2241 token-based and parse-tree-based views of python programs by inserting
2242 two-way links between tokens and ast nodes.
2243
2244 `LibCST <https://libcst.readthedocs.io/>`_ parses code as a Concrete Syntax
2245 Tree that looks like an ast tree and keeps all formatting details. It's
2246 useful for building automated refactoring (codemod) applications and
2247 linters.
2248
2249 `Parso <https://parso.readthedocs.io>`_ is a Python parser that supports
2250 error recovery and round-trip parsing for different Python versions (in
2251 multiple Python versions). Parso is also able to list multiple syntax errors
Batuhan Taskayae799aa82020-10-04 03:46:44 +03002252 in your python file.