• 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" `assignment_expression` ":" `suite`
94          : ("elif" `assignment_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" `assignment_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 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`, :keyword:`break`
329or :keyword:`continue` statement, 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.'
351
352The return value of a function is determined by the last :keyword:`return`
353statement executed.  Since the :keyword:`finally` clause always executes, a
354:keyword:`!return` statement executed in the :keyword:`!finally` clause will
355always be the last one executed::
356
357   >>> def foo():
358   ...     try:
359   ...         return 'try'
360   ...     finally:
361   ...         return 'finally'
362   ...
363   >>> foo()
364   'finally'
365
366Additional information on exceptions can be found in section :ref:`exceptions`,
367and information on using the :keyword:`raise` statement to generate exceptions
368may be found in section :ref:`raise`.
369
370.. versionchanged:: 3.8
371   Prior to Python 3.8, a :keyword:`continue` statement was illegal in the
372   :keyword:`finally` clause due to a problem with the implementation.
373
374
375.. _with:
376.. _as:
377
378The :keyword:`!with` statement
379==============================
380
381.. index::
382   ! statement: with
383   keyword: as
384   single: as; with statement
385   single: , (comma); with statement
386   single: : (colon); compound statement
387
388The :keyword:`with` statement is used to wrap the execution of a block with
389methods defined by a context manager (see section :ref:`context-managers`).
390This allows common :keyword:`try`...\ :keyword:`except`...\ :keyword:`finally`
391usage patterns to be encapsulated for convenient reuse.
392
393.. productionlist::
394   with_stmt: "with" `with_item` ("," `with_item`)* ":" `suite`
395   with_item: `expression` ["as" `target`]
396
397The execution of the :keyword:`with` statement with one "item" proceeds as follows:
398
399#. The context expression (the expression given in the :token:`with_item`) is
400   evaluated to obtain a context manager.
401
402#. The context manager's :meth:`__enter__` is loaded for later use.
403
404#. The context manager's :meth:`__exit__` is loaded for later use.
405
406#. The context manager's :meth:`__enter__` method is invoked.
407
408#. If a target was included in the :keyword:`with` statement, the return value
409   from :meth:`__enter__` is assigned to it.
410
411   .. note::
412
413      The :keyword:`with` statement guarantees that if the :meth:`__enter__`
414      method returns without an error, then :meth:`__exit__` will always be
415      called. Thus, if an error occurs during the assignment to the target list,
416      it will be treated the same as an error occurring within the suite would
417      be. See step 6 below.
418
419#. The suite is executed.
420
421#. The context manager's :meth:`__exit__` method is invoked.  If an exception
422   caused the suite to be exited, its type, value, and traceback are passed as
423   arguments to :meth:`__exit__`. Otherwise, three :const:`None` arguments are
424   supplied.
425
426   If the suite was exited due to an exception, and the return value from the
427   :meth:`__exit__` method was false, the exception is reraised.  If the return
428   value was true, the exception is suppressed, and execution continues with the
429   statement following the :keyword:`with` statement.
430
431   If the suite was exited for any reason other than an exception, the return
432   value from :meth:`__exit__` is ignored, and execution proceeds at the normal
433   location for the kind of exit that was taken.
434
435The following code::
436
437    with EXPRESSION as TARGET:
438        SUITE
439
440is semantically equivalent to::
441
442    manager = (EXPRESSION)
443    enter = type(manager).__enter__
444    exit = type(manager).__exit__
445    value = enter(manager)
446    hit_except = False
447
448    try:
449        TARGET = value
450        SUITE
451    except:
452        hit_except = True
453        if not exit(manager, *sys.exc_info()):
454            raise
455    finally:
456        if not hit_except:
457            exit(manager, None, None, None)
458
459With more than one item, the context managers are processed as if multiple
460:keyword:`with` statements were nested::
461
462   with A() as a, B() as b:
463       SUITE
464
465is semantically equivalent to::
466
467   with A() as a:
468       with B() as b:
469           SUITE
470
471.. versionchanged:: 3.1
472   Support for multiple context expressions.
473
474.. seealso::
475
476   :pep:`343` - The "with" statement
477      The specification, background, and examples for the Python :keyword:`with`
478      statement.
479
480
481.. index::
482   single: parameter; function definition
483
484.. _function:
485.. _def:
486
487Function definitions
488====================
489
490.. index::
491   statement: def
492   pair: function; definition
493   pair: function; name
494   pair: name; binding
495   object: user-defined function
496   object: function
497   pair: function; name
498   pair: name; binding
499   single: () (parentheses); function definition
500   single: , (comma); parameter list
501   single: : (colon); compound statement
502
503A function definition defines a user-defined function object (see section
504:ref:`types`):
505
506.. productionlist::
507   funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")"
508          : ["->" `expression`] ":" `suite`
509   decorators: `decorator`+
510   decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE
511   dotted_name: `identifier` ("." `identifier`)*
512   parameter_list: `defparameter` ("," `defparameter`)* "," "/" ["," [`parameter_list_no_posonly`]]
513                 :   | `parameter_list_no_posonly`
514   parameter_list_no_posonly: `defparameter` ("," `defparameter`)* ["," [`parameter_list_starargs`]]
515                            : | `parameter_list_starargs`
516   parameter_list_starargs: "*" [`parameter`] ("," `defparameter`)* ["," ["**" `parameter` [","]]]
517                          : | "**" `parameter` [","]
518   parameter: `identifier` [":" `expression`]
519   defparameter: `parameter` ["=" `expression`]
520   funcname: `identifier`
521
522
523A function definition is an executable statement.  Its execution binds the
524function name in the current local namespace to a function object (a wrapper
525around the executable code for the function).  This function object contains a
526reference to the current global namespace as the global namespace to be used
527when the function is called.
528
529The function definition does not execute the function body; this gets executed
530only when the function is called. [#]_
531
532.. index::
533   single: @ (at); function definition
534
535A function definition may be wrapped by one or more :term:`decorator` expressions.
536Decorator expressions are evaluated when the function is defined, in the scope
537that contains the function definition.  The result must be a callable, which is
538invoked with the function object as the only argument. The returned value is
539bound to the function name instead of the function object.  Multiple decorators
540are applied in nested fashion. For example, the following code ::
541
542   @f1(arg)
543   @f2
544   def func(): pass
545
546is roughly equivalent to ::
547
548   def func(): pass
549   func = f1(arg)(f2(func))
550
551except that the original function is not temporarily bound to the name ``func``.
552
553.. index::
554   triple: default; parameter; value
555   single: argument; function definition
556   single: = (equals); function definition
557
558When one or more :term:`parameters <parameter>` have the form *parameter* ``=``
559*expression*, the function is said to have "default parameter values."  For a
560parameter with a default value, the corresponding :term:`argument` may be
561omitted from a call, in which
562case the parameter's default value is substituted.  If a parameter has a default
563value, all following parameters up until the "``*``" must also have a default
564value --- this is a syntactic restriction that is not expressed by the grammar.
565
566**Default parameter values are evaluated from left to right when the function
567definition is executed.** This means that the expression is evaluated once, when
568the function is defined, and that the same "pre-computed" value is used for each
569call.  This is especially important to understand when a default parameter is a
570mutable object, such as a list or a dictionary: if the function modifies the
571object (e.g. by appending an item to a list), the default value is in effect
572modified.  This is generally not what was intended.  A way around this is to use
573``None`` as the default, and explicitly test for it in the body of the function,
574e.g.::
575
576   def whats_on_the_telly(penguin=None):
577       if penguin is None:
578           penguin = []
579       penguin.append("property of the zoo")
580       return penguin
581
582.. index::
583   single: * (asterisk); function definition
584   single: **; function definition
585
586Function call semantics are described in more detail in section :ref:`calls`. A
587function call always assigns values to all parameters mentioned in the parameter
588list, either from position arguments, from keyword arguments, or from default
589values.  If the form "``*identifier``" is present, it is initialized to a tuple
590receiving any excess positional parameters, defaulting to the empty tuple.
591If the form "``**identifier``" is present, it is initialized to a new
592ordered mapping receiving any excess keyword arguments, defaulting to a
593new empty mapping of the same type.  Parameters after "``*``" or
594"``*identifier``" are keyword-only parameters and may only be passed
595used keyword arguments.
596
597.. index::
598   pair: function; annotations
599   single: ->; function annotations
600   single: : (colon); function annotations
601
602Parameters may have an :term:`annotation <function annotation>` of the form "``: expression``"
603following the parameter name.  Any parameter may have an annotation, even those of the form
604``*identifier`` or ``**identifier``.  Functions may have "return" annotation of
605the form "``-> expression``" after the parameter list.  These annotations can be
606any valid Python expression.  The presence of annotations does not change the
607semantics of a function.  The annotation values are available as values of
608a dictionary keyed by the parameters' names in the :attr:`__annotations__`
609attribute of the function object.  If the ``annotations`` import from
610:mod:`__future__` is used, annotations are preserved as strings at runtime which
611enables postponed evaluation.  Otherwise, they are evaluated when the function
612definition is executed.  In this case annotations may be evaluated in
613a different order than they appear in the source code.
614
615.. index:: pair: lambda; expression
616
617It is also possible to create anonymous functions (functions not bound to a
618name), for immediate use in expressions.  This uses lambda expressions, described in
619section :ref:`lambda`.  Note that the lambda expression is merely a shorthand for a
620simplified function definition; a function defined in a ":keyword:`def`"
621statement can be passed around or assigned to another name just like a function
622defined by a lambda expression.  The ":keyword:`!def`" form is actually more powerful
623since it allows the execution of multiple statements and annotations.
624
625**Programmer's note:** Functions are first-class objects.  A "``def``" statement
626executed inside a function definition defines a local function that can be
627returned or passed around.  Free variables used in the nested function can
628access the local variables of the function containing the def.  See section
629:ref:`naming` for details.
630
631.. seealso::
632
633   :pep:`3107` - Function Annotations
634      The original specification for function annotations.
635
636   :pep:`484` - Type Hints
637      Definition of a standard meaning for annotations: type hints.
638
639   :pep:`526` - Syntax for Variable Annotations
640      Ability to type hint variable declarations, including class
641      variables and instance variables
642
643   :pep:`563` - Postponed Evaluation of Annotations
644      Support for forward references within annotations by preserving
645      annotations in a string form at runtime instead of eager evaluation.
646
647
648.. _class:
649
650Class definitions
651=================
652
653.. index::
654   object: class
655   statement: class
656   pair: class; definition
657   pair: class; name
658   pair: name; binding
659   pair: execution; frame
660   single: inheritance
661   single: docstring
662   single: () (parentheses); class definition
663   single: , (comma); expression list
664   single: : (colon); compound statement
665
666A class definition defines a class object (see section :ref:`types`):
667
668.. productionlist::
669   classdef: [`decorators`] "class" `classname` [`inheritance`] ":" `suite`
670   inheritance: "(" [`argument_list`] ")"
671   classname: `identifier`
672
673A class definition is an executable statement.  The inheritance list usually
674gives a list of base classes (see :ref:`metaclasses` for more advanced uses), so
675each item in the list should evaluate to a class object which allows
676subclassing.  Classes without an inheritance list inherit, by default, from the
677base class :class:`object`; hence, ::
678
679   class Foo:
680       pass
681
682is equivalent to ::
683
684   class Foo(object):
685       pass
686
687The class's suite is then executed in a new execution frame (see :ref:`naming`),
688using a newly created local namespace and the original global namespace.
689(Usually, the suite contains mostly function definitions.)  When the class's
690suite finishes execution, its execution frame is discarded but its local
691namespace is saved. [#]_ A class object is then created using the inheritance
692list for the base classes and the saved local namespace for the attribute
693dictionary.  The class name is bound to this class object in the original local
694namespace.
695
696The order in which attributes are defined in the class body is preserved
697in the new class's ``__dict__``.  Note that this is reliable only right
698after the class is created and only for classes that were defined using
699the definition syntax.
700
701Class creation can be customized heavily using :ref:`metaclasses <metaclasses>`.
702
703.. index::
704   single: @ (at); class definition
705
706Classes can also be decorated: just like when decorating functions, ::
707
708   @f1(arg)
709   @f2
710   class Foo: pass
711
712is roughly equivalent to ::
713
714   class Foo: pass
715   Foo = f1(arg)(f2(Foo))
716
717The evaluation rules for the decorator expressions are the same as for function
718decorators.  The result is then bound to the class name.
719
720**Programmer's note:** Variables defined in the class definition are class
721attributes; they are shared by instances.  Instance attributes can be set in a
722method with ``self.name = value``.  Both class and instance attributes are
723accessible through the notation "``self.name``", and an instance attribute hides
724a class attribute with the same name when accessed in this way.  Class
725attributes can be used as defaults for instance attributes, but using mutable
726values there can lead to unexpected results.  :ref:`Descriptors <descriptors>`
727can be used to create instance variables with different implementation details.
728
729
730.. seealso::
731
732   :pep:`3115` - Metaclasses in Python 3000
733      The proposal that changed the declaration of metaclasses to the current
734      syntax, and the semantics for how classes with metaclasses are
735      constructed.
736
737   :pep:`3129` - Class Decorators
738      The proposal that added class decorators.  Function and method decorators
739      were introduced in :pep:`318`.
740
741
742.. _async:
743
744Coroutines
745==========
746
747.. versionadded:: 3.5
748
749.. index:: statement: async def
750.. _`async def`:
751
752Coroutine function definition
753-----------------------------
754
755.. productionlist::
756   async_funcdef: [`decorators`] "async" "def" `funcname` "(" [`parameter_list`] ")"
757                : ["->" `expression`] ":" `suite`
758
759.. index::
760   keyword: async
761   keyword: await
762
763Execution of Python coroutines can be suspended and resumed at many points
764(see :term:`coroutine`).  Inside the body of a coroutine function, ``await`` and
765``async`` identifiers become reserved keywords; :keyword:`await` expressions,
766:keyword:`async for` and :keyword:`async with` can only be used in
767coroutine function bodies.
768
769Functions defined with ``async def`` syntax are always coroutine functions,
770even if they do not contain ``await`` or ``async`` keywords.
771
772It is a :exc:`SyntaxError` to use a ``yield from`` expression inside the body
773of a coroutine function.
774
775An example of a coroutine function::
776
777    async def func(param1, param2):
778        do_stuff()
779        await some_coroutine()
780
781
782.. index:: statement: async for
783.. _`async for`:
784
785The :keyword:`!async for` statement
786-----------------------------------
787
788.. productionlist::
789   async_for_stmt: "async" `for_stmt`
790
791An :term:`asynchronous iterable` is able to call asynchronous code in its
792*iter* implementation, and :term:`asynchronous iterator` can call asynchronous
793code in its *next* method.
794
795The ``async for`` statement allows convenient iteration over asynchronous
796iterators.
797
798The following code::
799
800    async for TARGET in ITER:
801        SUITE
802    else:
803        SUITE2
804
805Is semantically equivalent to::
806
807    iter = (ITER)
808    iter = type(iter).__aiter__(iter)
809    running = True
810
811    while running:
812        try:
813            TARGET = await type(iter).__anext__(iter)
814        except StopAsyncIteration:
815            running = False
816        else:
817            SUITE
818    else:
819        SUITE2
820
821See also :meth:`__aiter__` and :meth:`__anext__` for details.
822
823It is a :exc:`SyntaxError` to use an ``async for`` statement outside the
824body of a coroutine function.
825
826
827.. index:: statement: async with
828.. _`async with`:
829
830The :keyword:`!async with` statement
831------------------------------------
832
833.. productionlist::
834   async_with_stmt: "async" `with_stmt`
835
836An :term:`asynchronous context manager` is a :term:`context manager` that is
837able to suspend execution in its *enter* and *exit* methods.
838
839The following code::
840
841    async with EXPRESSION as TARGET:
842        SUITE
843
844is semantically equivalent to::
845
846    manager = (EXPRESSION)
847    aexit = type(manager).__aexit__
848    aenter = type(manager).__aenter__
849    value = await aenter(manager)
850    hit_except = False
851
852    try:
853        TARGET = value
854        SUITE
855    except:
856        hit_except = True
857        if not await aexit(manager, *sys.exc_info()):
858            raise
859    finally:
860        if not hit_except:
861            await aexit(manager, None, None, None)
862
863See also :meth:`__aenter__` and :meth:`__aexit__` for details.
864
865It is a :exc:`SyntaxError` to use an ``async with`` statement outside the
866body of a coroutine function.
867
868.. seealso::
869
870   :pep:`492` - Coroutines with async and await syntax
871      The proposal that made coroutines a proper standalone concept in Python,
872      and added supporting syntax.
873
874
875.. rubric:: Footnotes
876
877.. [#] The exception is propagated to the invocation stack unless
878   there is a :keyword:`finally` clause which happens to raise another
879   exception. That new exception causes the old one to be lost.
880
881.. [#] A string literal appearing as the first statement in the function body is
882   transformed into the function's ``__doc__`` attribute and therefore the
883   function's :term:`docstring`.
884
885.. [#] A string literal appearing as the first statement in the class body is
886   transformed into the namespace's ``__doc__`` item and therefore the class's
887   :term:`docstring`.
888