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