• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. _compound:
2
3*******************
4Compound statements
5*******************
6
7.. index:: pair: compound; statement
8
9Compound statements contain (groups of) other statements; they affect or control
10the execution of those other statements in some way.  In general, compound
11statements span multiple lines, although in simple incarnations a whole compound
12statement may be contained in one line.
13
14The :keyword:`if`, :keyword:`while` and :keyword:`for` statements implement
15traditional control flow constructs.  :keyword:`try` specifies exception
16handlers and/or cleanup code for a group of statements, while the
17:keyword:`with` statement allows the execution of initialization and
18finalization code around a block of code.  Function and class definitions are
19also syntactically compound statements.
20
21.. index::
22   single: clause
23   single: suite
24   single: ; (semicolon)
25
26A compound statement consists of one or more 'clauses.'  A clause consists of a
27header and a 'suite.'  The clause headers of a particular compound statement are
28all at the same indentation level. Each clause header begins with a uniquely
29identifying keyword and ends with a colon.  A suite is a group of statements
30controlled by a clause.  A suite can be one or more semicolon-separated simple
31statements on the same line as the header, following the header's colon, or it
32can be one or more indented statements on subsequent lines.  Only the latter
33form of a suite can contain nested compound statements; the following is illegal,
34mostly because it wouldn't be clear to which :keyword:`if` clause a following
35:keyword:`else` clause would belong::
36
37   if test1: if test2: print(x)
38
39Also note that the semicolon binds tighter than the colon in this context, so
40that in the following example, either all or none of the :func:`print` calls are
41executed::
42
43   if x < y < z: print(x); print(y); print(z)
44
45Summarizing:
46
47.. productionlist::
48   compound_stmt: `if_stmt`
49                : | `while_stmt`
50                : | `for_stmt`
51                : | `try_stmt`
52                : | `with_stmt`
53                : | `funcdef`
54                : | `classdef`
55                : | `async_with_stmt`
56                : | `async_for_stmt`
57                : | `async_funcdef`
58   suite: `stmt_list` NEWLINE | NEWLINE INDENT `statement`+ DEDENT
59   statement: `stmt_list` NEWLINE | `compound_stmt`
60   stmt_list: `simple_stmt` (";" `simple_stmt`)* [";"]
61
62.. index::
63   single: NEWLINE token
64   single: DEDENT token
65   pair: dangling; else
66
67Note that statements always end in a ``NEWLINE`` possibly followed by a
68``DEDENT``.  Also note that optional continuation clauses always begin with a
69keyword that cannot start a statement, thus there are no ambiguities (the
70'dangling :keyword:`else`' problem is solved in Python by requiring nested
71:keyword:`if` statements to be indented).
72
73The formatting of the grammar rules in the following sections places each clause
74on a separate line for clarity.
75
76
77.. _if:
78.. _elif:
79.. _else:
80
81The :keyword:`!if` statement
82============================
83
84.. index::
85   ! statement: if
86   keyword: elif
87   keyword: else
88   single: : (colon); compound statement
89
90The :keyword:`if` statement is used for conditional execution:
91
92.. productionlist::
93   if_stmt: "if" `expression` ":" `suite`
94          : ("elif" `expression` ":" `suite`)*
95          : ["else" ":" `suite`]
96
97It selects exactly one of the suites by evaluating the expressions one by one
98until one is found to be true (see section :ref:`booleans` for the definition of
99true and false); then that suite is executed (and no other part of the
100:keyword:`if` statement is executed or evaluated).  If all expressions are
101false, the suite of the :keyword:`else` clause, if present, is executed.
102
103
104.. _while:
105
106The :keyword:`!while` statement
107===============================
108
109.. index::
110   ! statement: while
111   keyword: else
112   pair: loop; statement
113   single: : (colon); compound statement
114
115The :keyword:`while` statement is used for repeated execution as long as an
116expression is true:
117
118.. productionlist::
119   while_stmt: "while" `expression` ":" `suite`
120             : ["else" ":" `suite`]
121
122This repeatedly tests the expression and, if it is true, executes the first
123suite; if the expression is false (which may be the first time it is tested) the
124suite of the :keyword:`!else` clause, if present, is executed and the loop
125terminates.
126
127.. index::
128   statement: break
129   statement: continue
130
131A :keyword:`break` statement executed in the first suite terminates the loop
132without executing the :keyword:`!else` clause's suite.  A :keyword:`continue`
133statement executed in the first suite skips the rest of the suite and goes back
134to testing the expression.
135
136
137.. _for:
138
139The :keyword:`!for` statement
140=============================
141
142.. index::
143   ! statement: for
144   keyword: in
145   keyword: else
146   pair: target; list
147   pair: loop; statement
148   object: sequence
149   single: : (colon); compound statement
150
151The :keyword:`for` statement is used to iterate over the elements of a sequence
152(such as a string, tuple or list) or other iterable object:
153
154.. productionlist::
155   for_stmt: "for" `target_list` "in" `expression_list` ":" `suite`
156           : ["else" ":" `suite`]
157
158The expression list is evaluated once; it should yield an iterable object.  An
159iterator is created for the result of the ``expression_list``.  The suite is
160then executed once for each item provided by the iterator, in the order returned
161by the iterator.  Each item in turn is assigned to the target list using the
162standard rules for assignments (see :ref:`assignment`), and then the suite is
163executed.  When the items are exhausted (which is immediately when the sequence
164is empty or an iterator raises a :exc:`StopIteration` exception), the suite in
165the :keyword:`!else` clause, if present, is executed, and the loop terminates.
166
167.. index::
168   statement: break
169   statement: continue
170
171A :keyword:`break` statement executed in the first suite terminates the loop
172without executing the :keyword:`!else` clause's suite.  A :keyword:`continue`
173statement executed in the first suite skips the rest of the suite and continues
174with the next item, or with the :keyword:`!else` clause if there is no next
175item.
176
177The for-loop makes assignments to the variables(s) in the target list.
178This overwrites all previous assignments to those variables including
179those made in the suite of the for-loop::
180
181   for i in range(10):
182       print(i)
183       i = 5             # this will not affect the for-loop
184                         # because i will be overwritten with the next
185                         # index in the range
186
187
188.. index::
189   builtin: range
190
191Names in the target list are not deleted when the loop is finished, but if the
192sequence is empty, they will not have been assigned to at all by the loop.  Hint:
193the built-in function :func:`range` returns an iterator of integers suitable to
194emulate the effect of Pascal's ``for i := a to b do``; e.g., ``list(range(3))``
195returns the list ``[0, 1, 2]``.
196
197.. note::
198
199   .. index::
200      single: loop; over mutable sequence
201      single: mutable sequence; loop over
202
203   There is a subtlety when the sequence is being modified by the loop (this can
204   only occur for mutable sequences, e.g. lists).  An internal counter is used
205   to keep track of which item is used next, and this is incremented on each
206   iteration.  When this counter has reached the length of the sequence the loop
207   terminates.  This means that if the suite deletes the current (or a previous)
208   item from the sequence, the next item will be skipped (since it gets the
209   index of the current item which has already been treated).  Likewise, if the
210   suite inserts an item in the sequence before the current item, the current
211   item will be treated again the next time through the loop. This can lead to
212   nasty bugs that can be avoided by making a temporary copy using a slice of
213   the whole sequence, e.g., ::
214
215      for x in a[:]:
216          if x < 0: a.remove(x)
217
218
219.. _try:
220.. _except:
221.. _finally:
222
223The :keyword:`!try` statement
224=============================
225
226.. index::
227   ! statement: try
228   keyword: except
229   keyword: finally
230   keyword: else
231   keyword: as
232   single: : (colon); compound statement
233
234The :keyword:`try` statement specifies exception handlers and/or cleanup code
235for a group of statements:
236
237.. productionlist::
238   try_stmt: `try1_stmt` | `try2_stmt`
239   try1_stmt: "try" ":" `suite`
240            : ("except" [`expression` ["as" `identifier`]] ":" `suite`)+
241            : ["else" ":" `suite`]
242            : ["finally" ":" `suite`]
243   try2_stmt: "try" ":" `suite`
244            : "finally" ":" `suite`
245
246
247The :keyword:`except` clause(s) specify one or more exception handlers. When no
248exception occurs in the :keyword:`try` clause, no exception handler is executed.
249When an exception occurs in the :keyword:`!try` suite, a search for an exception
250handler is started.  This search inspects the except clauses in turn until one
251is found that matches the exception.  An expression-less except clause, if
252present, must be last; it matches any exception.  For an except clause with an
253expression, that expression is evaluated, and the clause matches the exception
254if the resulting object is "compatible" with the exception.  An object is
255compatible with an exception if it is the class or a base class of the exception
256object or a tuple containing an item compatible with the exception.
257
258If no except clause matches the exception, the search for an exception handler
259continues in the surrounding code and on the invocation stack.  [#]_
260
261If the evaluation of an expression in the header of an except clause raises an
262exception, the original search for a handler is canceled and a search starts for
263the new exception in the surrounding code and on the call stack (it is treated
264as if the entire :keyword:`try` statement raised the exception).
265
266.. index:: single: as; except clause
267
268When a matching except clause is found, the exception is assigned to the target
269specified after the :keyword:`!as` keyword in that except clause, if present, and
270the except clause's suite is executed.  All except clauses must have an
271executable block.  When the end of this block is reached, execution continues
272normally after the entire try statement.  (This means that if two nested
273handlers exist for the same exception, and the exception occurs in the try
274clause of the inner handler, the outer handler will not handle the exception.)
275
276When an exception has been assigned using ``as target``, it is cleared at the
277end of the except clause.  This is as if ::
278
279   except E as N:
280       foo
281
282was translated to ::
283
284   except E as N:
285       try:
286           foo
287       finally:
288           del N
289
290This means the exception must be assigned to a different name to be able to
291refer to it after the except clause.  Exceptions are cleared because with the
292traceback attached to them, they form a reference cycle with the stack frame,
293keeping all locals in that frame alive until the next garbage collection occurs.
294
295.. index::
296   module: sys
297   object: traceback
298
299Before an except clause's suite is executed, details about the exception are
300stored in the :mod:`sys` module and can be accessed via :func:`sys.exc_info`.
301:func:`sys.exc_info` returns a 3-tuple consisting of the exception class, the
302exception instance and a traceback object (see section :ref:`types`) identifying
303the point in the program where the exception occurred.  :func:`sys.exc_info`
304values are restored to their previous values (before the call) when returning
305from a function that handled an exception.
306
307.. index::
308   keyword: else
309   statement: return
310   statement: break
311   statement: continue
312
313The optional :keyword:`!else` clause is executed if the control flow leaves the
314:keyword:`try` suite, no exception was raised, and no :keyword:`return`,
315:keyword:`continue`, or :keyword:`break` statement was executed.  Exceptions in
316the :keyword:`!else` clause are not handled by the preceding :keyword:`except`
317clauses.
318
319.. index:: keyword: finally
320
321If :keyword:`finally` is present, it specifies a 'cleanup' handler.  The
322:keyword:`try` clause is executed, including any :keyword:`except` and
323:keyword:`!else` clauses.  If an exception occurs in any of the clauses and is
324not handled, the exception is temporarily saved. The :keyword:`!finally` clause
325is executed.  If there is a saved exception it is re-raised at the end of the
326:keyword:`!finally` clause.  If the :keyword:`!finally` clause raises another
327exception, the saved exception is set as the context of the new exception.
328If the :keyword:`!finally` clause executes a :keyword:`return` or :keyword:`break`
329statement, the saved exception is discarded::
330
331   >>> def f():
332   ...     try:
333   ...         1/0
334   ...     finally:
335   ...         return 42
336   ...
337   >>> f()
338   42
339
340The exception information is not available to the program during execution of
341the :keyword:`finally` clause.
342
343.. index::
344   statement: return
345   statement: break
346   statement: continue
347
348When a :keyword:`return`, :keyword:`break` or :keyword:`continue` statement is
349executed in the :keyword:`try` suite of a :keyword:`!try`...\ :keyword:`!finally`
350statement, the :keyword:`finally` clause is also executed 'on the way out.' A
351:keyword:`continue` statement is illegal in the :keyword:`!finally` clause. (The
352reason is a problem with the current implementation --- this restriction may be
353lifted in the future).
354
355The return value of a function is determined by the last :keyword:`return`
356statement executed.  Since the :keyword:`finally` clause always executes, a
357:keyword:`!return` statement executed in the :keyword:`!finally` clause will
358always be the last one executed::
359
360   >>> def foo():
361   ...     try:
362   ...         return 'try'
363   ...     finally:
364   ...         return 'finally'
365   ...
366   >>> foo()
367   'finally'
368
369Additional information on exceptions can be found in section :ref:`exceptions`,
370and information on using the :keyword:`raise` statement to generate exceptions
371may be found in section :ref:`raise`.
372
373
374.. _with:
375.. _as:
376
377The :keyword:`!with` statement
378==============================
379
380.. index::
381   ! statement: with
382   keyword: as
383   single: as; with statement
384   single: , (comma); with statement
385   single: : (colon); compound statement
386
387The :keyword:`with` statement is used to wrap the execution of a block with
388methods defined by a context manager (see section :ref:`context-managers`).
389This allows common :keyword:`try`...\ :keyword:`except`...\ :keyword:`finally`
390usage patterns to be encapsulated for convenient reuse.
391
392.. productionlist::
393   with_stmt: "with" `with_item` ("," `with_item`)* ":" `suite`
394   with_item: `expression` ["as" `target`]
395
396The execution of the :keyword:`with` statement with one "item" proceeds as follows:
397
398#. The context expression (the expression given in the :token:`with_item`) is
399   evaluated to obtain a context manager.
400
401#. The context manager's :meth:`__exit__` is loaded for later use.
402
403#. The context manager's :meth:`__enter__` method is invoked.
404
405#. If a target was included in the :keyword:`with` statement, the return value
406   from :meth:`__enter__` is assigned to it.
407
408   .. note::
409
410      The :keyword:`with` statement guarantees that if the :meth:`__enter__`
411      method returns without an error, then :meth:`__exit__` will always be
412      called. Thus, if an error occurs during the assignment to the target list,
413      it will be treated the same as an error occurring within the suite would
414      be. See step 6 below.
415
416#. The suite is executed.
417
418#. The context manager's :meth:`__exit__` method is invoked.  If an exception
419   caused the suite to be exited, its type, value, and traceback are passed as
420   arguments to :meth:`__exit__`. Otherwise, three :const:`None` arguments are
421   supplied.
422
423   If the suite was exited due to an exception, and the return value from the
424   :meth:`__exit__` method was false, the exception is reraised.  If the return
425   value was true, the exception is suppressed, and execution continues with the
426   statement following the :keyword:`with` statement.
427
428   If the suite was exited for any reason other than an exception, the return
429   value from :meth:`__exit__` is ignored, and execution proceeds at the normal
430   location for the kind of exit that was taken.
431
432With more than one item, the context managers are processed as if multiple
433:keyword:`with` statements were nested::
434
435   with A() as a, B() as b:
436       suite
437
438is equivalent to ::
439
440   with A() as a:
441       with B() as b:
442           suite
443
444.. versionchanged:: 3.1
445   Support for multiple context expressions.
446
447.. seealso::
448
449   :pep:`343` - The "with" statement
450      The specification, background, and examples for the Python :keyword:`with`
451      statement.
452
453
454.. index::
455   single: parameter; function definition
456
457.. _function:
458.. _def:
459
460Function definitions
461====================
462
463.. index::
464   statement: def
465   pair: function; definition
466   pair: function; name
467   pair: name; binding
468   object: user-defined function
469   object: function
470   pair: function; name
471   pair: name; binding
472   single: () (parentheses); function definition
473   single: , (comma); parameter list
474   single: : (colon); compound statement
475
476A function definition defines a user-defined function object (see section
477:ref:`types`):
478
479.. productionlist::
480   funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")"
481          : ["->" `expression`] ":" `suite`
482   decorators: `decorator`+
483   decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE
484   dotted_name: `identifier` ("." `identifier`)*
485   parameter_list: `defparameter` ("," `defparameter`)* ["," [`parameter_list_starargs`]]
486                 : | `parameter_list_starargs`
487   parameter_list_starargs: "*" [`parameter`] ("," `defparameter`)* ["," ["**" `parameter` [","]]]
488                          : | "**" `parameter` [","]
489   parameter: `identifier` [":" `expression`]
490   defparameter: `parameter` ["=" `expression`]
491   funcname: `identifier`
492
493
494A function definition is an executable statement.  Its execution binds the
495function name in the current local namespace to a function object (a wrapper
496around the executable code for the function).  This function object contains a
497reference to the current global namespace as the global namespace to be used
498when the function is called.
499
500The function definition does not execute the function body; this gets executed
501only when the function is called. [#]_
502
503.. index::
504   single: @ (at); function definition
505
506A function definition may be wrapped by one or more :term:`decorator` expressions.
507Decorator expressions are evaluated when the function is defined, in the scope
508that contains the function definition.  The result must be a callable, which is
509invoked with the function object as the only argument. The returned value is
510bound to the function name instead of the function object.  Multiple decorators
511are applied in nested fashion. For example, the following code ::
512
513   @f1(arg)
514   @f2
515   def func(): pass
516
517is roughly equivalent to ::
518
519   def func(): pass
520   func = f1(arg)(f2(func))
521
522except that the original function is not temporarily bound to the name ``func``.
523
524.. index::
525   triple: default; parameter; value
526   single: argument; function definition
527   single: = (equals); function definition
528
529When one or more :term:`parameters <parameter>` have the form *parameter* ``=``
530*expression*, the function is said to have "default parameter values."  For a
531parameter with a default value, the corresponding :term:`argument` may be
532omitted from a call, in which
533case the parameter's default value is substituted.  If a parameter has a default
534value, all following parameters up until the "``*``" must also have a default
535value --- this is a syntactic restriction that is not expressed by the grammar.
536
537**Default parameter values are evaluated from left to right when the function
538definition is executed.** This means that the expression is evaluated once, when
539the function is defined, and that the same "pre-computed" value is used for each
540call.  This is especially important to understand when a default parameter is a
541mutable object, such as a list or a dictionary: if the function modifies the
542object (e.g. by appending an item to a list), the default value is in effect
543modified.  This is generally not what was intended.  A way around this is to use
544``None`` as the default, and explicitly test for it in the body of the function,
545e.g.::
546
547   def whats_on_the_telly(penguin=None):
548       if penguin is None:
549           penguin = []
550       penguin.append("property of the zoo")
551       return penguin
552
553.. index::
554   single: * (asterisk); function definition
555   single: **; function definition
556
557Function call semantics are described in more detail in section :ref:`calls`. A
558function call always assigns values to all parameters mentioned in the parameter
559list, either from position arguments, from keyword arguments, or from default
560values.  If the form "``*identifier``" is present, it is initialized to a tuple
561receiving any excess positional parameters, defaulting to the empty tuple.
562If the form "``**identifier``" is present, it is initialized to a new
563ordered mapping receiving any excess keyword arguments, defaulting to a
564new empty mapping of the same type.  Parameters after "``*``" or
565"``*identifier``" are keyword-only parameters and may only be passed
566used keyword arguments.
567
568.. index::
569   pair: function; annotations
570   single: ->; function annotations
571   single: : (colon); function annotations
572
573Parameters may have an :term:`annotation <function annotation>` of the form "``: expression``"
574following the parameter name.  Any parameter may have an annotation, even those of the form
575``*identifier`` or ``**identifier``.  Functions may have "return" annotation of
576the form "``-> expression``" after the parameter list.  These annotations can be
577any valid Python expression.  The presence of annotations does not change the
578semantics of a function.  The annotation values are available as values of
579a dictionary keyed by the parameters' names in the :attr:`__annotations__`
580attribute of the function object.  If the ``annotations`` import from
581:mod:`__future__` is used, annotations are preserved as strings at runtime which
582enables postponed evaluation.  Otherwise, they are evaluated when the function
583definition is executed.  In this case annotations may be evaluated in
584a different order than they appear in the source code.
585
586.. index:: pair: lambda; expression
587
588It is also possible to create anonymous functions (functions not bound to a
589name), for immediate use in expressions.  This uses lambda expressions, described in
590section :ref:`lambda`.  Note that the lambda expression is merely a shorthand for a
591simplified function definition; a function defined in a ":keyword:`def`"
592statement can be passed around or assigned to another name just like a function
593defined by a lambda expression.  The ":keyword:`!def`" form is actually more powerful
594since it allows the execution of multiple statements and annotations.
595
596**Programmer's note:** Functions are first-class objects.  A "``def``" statement
597executed inside a function definition defines a local function that can be
598returned or passed around.  Free variables used in the nested function can
599access the local variables of the function containing the def.  See section
600:ref:`naming` for details.
601
602.. seealso::
603
604   :pep:`3107` - Function Annotations
605      The original specification for function annotations.
606
607   :pep:`484` - Type Hints
608      Definition of a standard meaning for annotations: type hints.
609
610   :pep:`526` - Syntax for Variable Annotations
611      Ability to type hint variable declarations, including class
612      variables and instance variables
613
614   :pep:`563` - Postponed Evaluation of Annotations
615      Support for forward references within annotations by preserving
616      annotations in a string form at runtime instead of eager evaluation.
617
618
619.. _class:
620
621Class definitions
622=================
623
624.. index::
625   object: class
626   statement: class
627   pair: class; definition
628   pair: class; name
629   pair: name; binding
630   pair: execution; frame
631   single: inheritance
632   single: docstring
633   single: () (parentheses); class definition
634   single: , (comma); expression list
635   single: : (colon); compound statement
636
637A class definition defines a class object (see section :ref:`types`):
638
639.. productionlist::
640   classdef: [`decorators`] "class" `classname` [`inheritance`] ":" `suite`
641   inheritance: "(" [`argument_list`] ")"
642   classname: `identifier`
643
644A class definition is an executable statement.  The inheritance list usually
645gives a list of base classes (see :ref:`metaclasses` for more advanced uses), so
646each item in the list should evaluate to a class object which allows
647subclassing.  Classes without an inheritance list inherit, by default, from the
648base class :class:`object`; hence, ::
649
650   class Foo:
651       pass
652
653is equivalent to ::
654
655   class Foo(object):
656       pass
657
658The class's suite is then executed in a new execution frame (see :ref:`naming`),
659using a newly created local namespace and the original global namespace.
660(Usually, the suite contains mostly function definitions.)  When the class's
661suite finishes execution, its execution frame is discarded but its local
662namespace is saved. [#]_ A class object is then created using the inheritance
663list for the base classes and the saved local namespace for the attribute
664dictionary.  The class name is bound to this class object in the original local
665namespace.
666
667The order in which attributes are defined in the class body is preserved
668in the new class's ``__dict__``.  Note that this is reliable only right
669after the class is created and only for classes that were defined using
670the definition syntax.
671
672Class creation can be customized heavily using :ref:`metaclasses <metaclasses>`.
673
674.. index::
675   single: @ (at); class definition
676
677Classes can also be decorated: just like when decorating functions, ::
678
679   @f1(arg)
680   @f2
681   class Foo: pass
682
683is roughly equivalent to ::
684
685   class Foo: pass
686   Foo = f1(arg)(f2(Foo))
687
688The evaluation rules for the decorator expressions are the same as for function
689decorators.  The result is then bound to the class name.
690
691**Programmer's note:** Variables defined in the class definition are class
692attributes; they are shared by instances.  Instance attributes can be set in a
693method with ``self.name = value``.  Both class and instance attributes are
694accessible through the notation "``self.name``", and an instance attribute hides
695a class attribute with the same name when accessed in this way.  Class
696attributes can be used as defaults for instance attributes, but using mutable
697values there can lead to unexpected results.  :ref:`Descriptors <descriptors>`
698can be used to create instance variables with different implementation details.
699
700
701.. seealso::
702
703   :pep:`3115` - Metaclasses in Python 3000
704      The proposal that changed the declaration of metaclasses to the current
705      syntax, and the semantics for how classes with metaclasses are
706      constructed.
707
708   :pep:`3129` - Class Decorators
709      The proposal that added class decorators.  Function and method decorators
710      were introduced in :pep:`318`.
711
712
713.. _async:
714
715Coroutines
716==========
717
718.. versionadded:: 3.5
719
720.. index:: statement: async def
721.. _`async def`:
722
723Coroutine function definition
724-----------------------------
725
726.. productionlist::
727   async_funcdef: [`decorators`] "async" "def" `funcname` "(" [`parameter_list`] ")"
728                : ["->" `expression`] ":" `suite`
729
730.. index::
731   keyword: async
732   keyword: await
733
734Execution of Python coroutines can be suspended and resumed at many points
735(see :term:`coroutine`).  Inside the body of a coroutine function, ``await`` and
736``async`` identifiers become reserved keywords; :keyword:`await` expressions,
737:keyword:`async for` and :keyword:`async with` can only be used in
738coroutine function bodies.
739
740Functions defined with ``async def`` syntax are always coroutine functions,
741even if they do not contain ``await`` or ``async`` keywords.
742
743It is a :exc:`SyntaxError` to use a ``yield from`` expression inside the body
744of a coroutine function.
745
746An example of a coroutine function::
747
748    async def func(param1, param2):
749        do_stuff()
750        await some_coroutine()
751
752
753.. index:: statement: async for
754.. _`async for`:
755
756The :keyword:`!async for` statement
757-----------------------------------
758
759.. productionlist::
760   async_for_stmt: "async" `for_stmt`
761
762An :term:`asynchronous iterable` is able to call asynchronous code in its
763*iter* implementation, and :term:`asynchronous iterator` can call asynchronous
764code in its *next* method.
765
766The ``async for`` statement allows convenient iteration over asynchronous
767iterators.
768
769The following code::
770
771    async for TARGET in ITER:
772        BLOCK
773    else:
774        BLOCK2
775
776Is semantically equivalent to::
777
778    iter = (ITER)
779    iter = type(iter).__aiter__(iter)
780    running = True
781    while running:
782        try:
783            TARGET = await type(iter).__anext__(iter)
784        except StopAsyncIteration:
785            running = False
786        else:
787            BLOCK
788    else:
789        BLOCK2
790
791See also :meth:`__aiter__` and :meth:`__anext__` for details.
792
793It is a :exc:`SyntaxError` to use an ``async for`` statement outside the
794body of a coroutine function.
795
796
797.. index:: statement: async with
798.. _`async with`:
799
800The :keyword:`!async with` statement
801------------------------------------
802
803.. productionlist::
804   async_with_stmt: "async" `with_stmt`
805
806An :term:`asynchronous context manager` is a :term:`context manager` that is
807able to suspend execution in its *enter* and *exit* methods.
808
809The following code::
810
811    async with EXPR as VAR:
812        BLOCK
813
814Is semantically equivalent to::
815
816    mgr = (EXPR)
817    aexit = type(mgr).__aexit__
818    aenter = type(mgr).__aenter__(mgr)
819
820    VAR = await aenter
821    try:
822        BLOCK
823    except:
824        if not await aexit(mgr, *sys.exc_info()):
825            raise
826    else:
827        await aexit(mgr, None, None, None)
828
829See also :meth:`__aenter__` and :meth:`__aexit__` for details.
830
831It is a :exc:`SyntaxError` to use an ``async with`` statement outside the
832body of a coroutine function.
833
834.. seealso::
835
836   :pep:`492` - Coroutines with async and await syntax
837      The proposal that made coroutines a proper standalone concept in Python,
838      and added supporting syntax.
839
840
841.. rubric:: Footnotes
842
843.. [#] The exception is propagated to the invocation stack unless
844   there is a :keyword:`finally` clause which happens to raise another
845   exception. That new exception causes the old one to be lost.
846
847.. [#] A string literal appearing as the first statement in the function body is
848   transformed into the function's ``__doc__`` attribute and therefore the
849   function's :term:`docstring`.
850
851.. [#] A string literal appearing as the first statement in the class body is
852   transformed into the namespace's ``__doc__`` item and therefore the class's
853   :term:`docstring`.
854