1.. _tut-morecontrol: 2 3*********************** 4More Control Flow Tools 5*********************** 6 7Besides the :keyword:`while` statement just introduced, Python uses the usual 8flow control statements known from other languages, with some twists. 9 10 11.. _tut-if: 12 13:keyword:`!if` Statements 14========================= 15 16Perhaps the most well-known statement type is the :keyword:`if` statement. For 17example:: 18 19 >>> x = int(input("Please enter an integer: ")) 20 Please enter an integer: 42 21 >>> if x < 0: 22 ... x = 0 23 ... print('Negative changed to zero') 24 ... elif x == 0: 25 ... print('Zero') 26 ... elif x == 1: 27 ... print('Single') 28 ... else: 29 ... print('More') 30 ... 31 More 32 33There can be zero or more :keyword:`elif` parts, and the :keyword:`else` part is 34optional. The keyword ':keyword:`!elif`' is short for 'else if', and is useful 35to avoid excessive indentation. An :keyword:`!if` ... :keyword:`!elif` ... 36:keyword:`!elif` ... sequence is a substitute for the ``switch`` or 37``case`` statements found in other languages. 38 39 40.. _tut-for: 41 42:keyword:`!for` Statements 43========================== 44 45.. index:: 46 statement: for 47 48The :keyword:`for` statement in Python differs a bit from what you may be used 49to in C or Pascal. Rather than always iterating over an arithmetic progression 50of numbers (like in Pascal), or giving the user the ability to define both the 51iteration step and halting condition (as C), Python's :keyword:`!for` statement 52iterates over the items of any sequence (a list or a string), in the order that 53they appear in the sequence. For example (no pun intended): 54 55.. One suggestion was to give a real C example here, but that may only serve to 56 confuse non-C programmers. 57 58:: 59 60 >>> # Measure some strings: 61 ... words = ['cat', 'window', 'defenestrate'] 62 >>> for w in words: 63 ... print(w, len(w)) 64 ... 65 cat 3 66 window 6 67 defenestrate 12 68 69Code that modifies a collection while iterating over that same collection can 70be tricky to get right. Instead, it is usually more straight-forward to loop 71over a copy of the collection or to create a new collection:: 72 73 # Strategy: Iterate over a copy 74 for user, status in users.copy().items(): 75 if status == 'inactive': 76 del users[user] 77 78 # Strategy: Create a new collection 79 active_users = {} 80 for user, status in users.items(): 81 if status == 'active': 82 active_users[user] = status 83 84 85.. _tut-range: 86 87The :func:`range` Function 88========================== 89 90If you do need to iterate over a sequence of numbers, the built-in function 91:func:`range` comes in handy. It generates arithmetic progressions:: 92 93 >>> for i in range(5): 94 ... print(i) 95 ... 96 0 97 1 98 2 99 3 100 4 101 102The given end point is never part of the generated sequence; ``range(10)`` generates 10310 values, the legal indices for items of a sequence of length 10. It 104is possible to let the range start at another number, or to specify a different 105increment (even negative; sometimes this is called the 'step'):: 106 107 range(5, 10) 108 5, 6, 7, 8, 9 109 110 range(0, 10, 3) 111 0, 3, 6, 9 112 113 range(-10, -100, -30) 114 -10, -40, -70 115 116To iterate over the indices of a sequence, you can combine :func:`range` and 117:func:`len` as follows:: 118 119 >>> a = ['Mary', 'had', 'a', 'little', 'lamb'] 120 >>> for i in range(len(a)): 121 ... print(i, a[i]) 122 ... 123 0 Mary 124 1 had 125 2 a 126 3 little 127 4 lamb 128 129In most such cases, however, it is convenient to use the :func:`enumerate` 130function, see :ref:`tut-loopidioms`. 131 132A strange thing happens if you just print a range:: 133 134 >>> print(range(10)) 135 range(0, 10) 136 137In many ways the object returned by :func:`range` behaves as if it is a list, 138but in fact it isn't. It is an object which returns the successive items of 139the desired sequence when you iterate over it, but it doesn't really make 140the list, thus saving space. 141 142We say such an object is :term:`iterable`, that is, suitable as a target for 143functions and constructs that expect something from which they can 144obtain successive items until the supply is exhausted. We have seen that 145the :keyword:`for` statement is such a construct, while an example of a function 146that takes an iterable is :func:`sum`:: 147 148 >>> sum(range(4)) # 0 + 1 + 2 + 3 149 6 150 151Later we will see more functions that return iterables and take iterables as 152arguments. Lastly, maybe you are curious about how to get a list from a range. 153Here is the solution:: 154 155 >>> list(range(4)) 156 [0, 1, 2, 3] 157 158In chapter :ref:`tut-structures`, we will discuss in more detail about 159:func:`list`. 160 161.. _tut-break: 162 163:keyword:`!break` and :keyword:`!continue` Statements, and :keyword:`!else` Clauses on Loops 164============================================================================================ 165 166The :keyword:`break` statement, like in C, breaks out of the innermost enclosing 167:keyword:`for` or :keyword:`while` loop. 168 169Loop statements may have an :keyword:`!else` clause; it is executed when the loop 170terminates through exhaustion of the iterable (with :keyword:`for`) or when the 171condition becomes false (with :keyword:`while`), but not when the loop is 172terminated by a :keyword:`break` statement. This is exemplified by the 173following loop, which searches for prime numbers:: 174 175 >>> for n in range(2, 10): 176 ... for x in range(2, n): 177 ... if n % x == 0: 178 ... print(n, 'equals', x, '*', n//x) 179 ... break 180 ... else: 181 ... # loop fell through without finding a factor 182 ... print(n, 'is a prime number') 183 ... 184 2 is a prime number 185 3 is a prime number 186 4 equals 2 * 2 187 5 is a prime number 188 6 equals 2 * 3 189 7 is a prime number 190 8 equals 2 * 4 191 9 equals 3 * 3 192 193(Yes, this is the correct code. Look closely: the ``else`` clause belongs to 194the :keyword:`for` loop, **not** the :keyword:`if` statement.) 195 196When used with a loop, the ``else`` clause has more in common with the 197``else`` clause of a :keyword:`try` statement than it does with that of 198:keyword:`if` statements: a :keyword:`try` statement's ``else`` clause runs 199when no exception occurs, and a loop's ``else`` clause runs when no ``break`` 200occurs. For more on the :keyword:`!try` statement and exceptions, see 201:ref:`tut-handling`. 202 203The :keyword:`continue` statement, also borrowed from C, continues with the next 204iteration of the loop:: 205 206 >>> for num in range(2, 10): 207 ... if num % 2 == 0: 208 ... print("Found an even number", num) 209 ... continue 210 ... print("Found an odd number", num) 211 Found an even number 2 212 Found an odd number 3 213 Found an even number 4 214 Found an odd number 5 215 Found an even number 6 216 Found an odd number 7 217 Found an even number 8 218 Found an odd number 9 219 220.. _tut-pass: 221 222:keyword:`!pass` Statements 223=========================== 224 225The :keyword:`pass` statement does nothing. It can be used when a statement is 226required syntactically but the program requires no action. For example:: 227 228 >>> while True: 229 ... pass # Busy-wait for keyboard interrupt (Ctrl+C) 230 ... 231 232This is commonly used for creating minimal classes:: 233 234 >>> class MyEmptyClass: 235 ... pass 236 ... 237 238Another place :keyword:`pass` can be used is as a place-holder for a function or 239conditional body when you are working on new code, allowing you to keep thinking 240at a more abstract level. The :keyword:`!pass` is silently ignored:: 241 242 >>> def initlog(*args): 243 ... pass # Remember to implement this! 244 ... 245 246.. _tut-functions: 247 248Defining Functions 249================== 250 251We can create a function that writes the Fibonacci series to an arbitrary 252boundary:: 253 254 >>> def fib(n): # write Fibonacci series up to n 255 ... """Print a Fibonacci series up to n.""" 256 ... a, b = 0, 1 257 ... while a < n: 258 ... print(a, end=' ') 259 ... a, b = b, a+b 260 ... print() 261 ... 262 >>> # Now call the function we just defined: 263 ... fib(2000) 264 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 265 266.. index:: 267 single: documentation strings 268 single: docstrings 269 single: strings, documentation 270 271The keyword :keyword:`def` introduces a function *definition*. It must be 272followed by the function name and the parenthesized list of formal parameters. 273The statements that form the body of the function start at the next line, and 274must be indented. 275 276The first statement of the function body can optionally be a string literal; 277this string literal is the function's documentation string, or :dfn:`docstring`. 278(More about docstrings can be found in the section :ref:`tut-docstrings`.) 279There are tools which use docstrings to automatically produce online or printed 280documentation, or to let the user interactively browse through code; it's good 281practice to include docstrings in code that you write, so make a habit of it. 282 283The *execution* of a function introduces a new symbol table used for the local 284variables of the function. More precisely, all variable assignments in a 285function store the value in the local symbol table; whereas variable references 286first look in the local symbol table, then in the local symbol tables of 287enclosing functions, then in the global symbol table, and finally in the table 288of built-in names. Thus, global variables and variables of enclosing functions 289cannot be directly assigned a value within a function (unless, for global 290variables, named in a :keyword:`global` statement, or, for variables of enclosing 291functions, named in a :keyword:`nonlocal` statement), although they may be 292referenced. 293 294The actual parameters (arguments) to a function call are introduced in the local 295symbol table of the called function when it is called; thus, arguments are 296passed using *call by value* (where the *value* is always an object *reference*, 297not the value of the object). [#]_ When a function calls another function, a new 298local symbol table is created for that call. 299 300A function definition associates the function name with the function object in 301the current symbol table. The interpreter recognizes the object pointed to by 302that name as a user-defined function. Other names can also point to that same 303function object and can also be used to access the function:: 304 305 >>> fib 306 <function fib at 10042ed0> 307 >>> f = fib 308 >>> f(100) 309 0 1 1 2 3 5 8 13 21 34 55 89 310 311Coming from other languages, you might object that ``fib`` is not a function but 312a procedure since it doesn't return a value. In fact, even functions without a 313:keyword:`return` statement do return a value, albeit a rather boring one. This 314value is called ``None`` (it's a built-in name). Writing the value ``None`` is 315normally suppressed by the interpreter if it would be the only value written. 316You can see it if you really want to using :func:`print`:: 317 318 >>> fib(0) 319 >>> print(fib(0)) 320 None 321 322It is simple to write a function that returns a list of the numbers of the 323Fibonacci series, instead of printing it:: 324 325 >>> def fib2(n): # return Fibonacci series up to n 326 ... """Return a list containing the Fibonacci series up to n.""" 327 ... result = [] 328 ... a, b = 0, 1 329 ... while a < n: 330 ... result.append(a) # see below 331 ... a, b = b, a+b 332 ... return result 333 ... 334 >>> f100 = fib2(100) # call it 335 >>> f100 # write the result 336 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] 337 338This example, as usual, demonstrates some new Python features: 339 340* The :keyword:`return` statement returns with a value from a function. 341 :keyword:`!return` without an expression argument returns ``None``. Falling off 342 the end of a function also returns ``None``. 343 344* The statement ``result.append(a)`` calls a *method* of the list object 345 ``result``. A method is a function that 'belongs' to an object and is named 346 ``obj.methodname``, where ``obj`` is some object (this may be an expression), 347 and ``methodname`` is the name of a method that is defined by the object's type. 348 Different types define different methods. Methods of different types may have 349 the same name without causing ambiguity. (It is possible to define your own 350 object types and methods, using *classes*, see :ref:`tut-classes`) 351 The method :meth:`append` shown in the example is defined for list objects; it 352 adds a new element at the end of the list. In this example it is equivalent to 353 ``result = result + [a]``, but more efficient. 354 355 356.. _tut-defining: 357 358More on Defining Functions 359========================== 360 361It is also possible to define functions with a variable number of arguments. 362There are three forms, which can be combined. 363 364 365.. _tut-defaultargs: 366 367Default Argument Values 368----------------------- 369 370The most useful form is to specify a default value for one or more arguments. 371This creates a function that can be called with fewer arguments than it is 372defined to allow. For example:: 373 374 def ask_ok(prompt, retries=4, reminder='Please try again!'): 375 while True: 376 ok = input(prompt) 377 if ok in ('y', 'ye', 'yes'): 378 return True 379 if ok in ('n', 'no', 'nop', 'nope'): 380 return False 381 retries = retries - 1 382 if retries < 0: 383 raise ValueError('invalid user response') 384 print(reminder) 385 386This function can be called in several ways: 387 388* giving only the mandatory argument: 389 ``ask_ok('Do you really want to quit?')`` 390* giving one of the optional arguments: 391 ``ask_ok('OK to overwrite the file?', 2)`` 392* or even giving all arguments: 393 ``ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')`` 394 395This example also introduces the :keyword:`in` keyword. This tests whether or 396not a sequence contains a certain value. 397 398The default values are evaluated at the point of function definition in the 399*defining* scope, so that :: 400 401 i = 5 402 403 def f(arg=i): 404 print(arg) 405 406 i = 6 407 f() 408 409will print ``5``. 410 411**Important warning:** The default value is evaluated only once. This makes a 412difference when the default is a mutable object such as a list, dictionary, or 413instances of most classes. For example, the following function accumulates the 414arguments passed to it on subsequent calls:: 415 416 def f(a, L=[]): 417 L.append(a) 418 return L 419 420 print(f(1)) 421 print(f(2)) 422 print(f(3)) 423 424This will print :: 425 426 [1] 427 [1, 2] 428 [1, 2, 3] 429 430If you don't want the default to be shared between subsequent calls, you can 431write the function like this instead:: 432 433 def f(a, L=None): 434 if L is None: 435 L = [] 436 L.append(a) 437 return L 438 439 440.. _tut-keywordargs: 441 442Keyword Arguments 443----------------- 444 445Functions can also be called using :term:`keyword arguments <keyword argument>` 446of the form ``kwarg=value``. For instance, the following function:: 447 448 def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): 449 print("-- This parrot wouldn't", action, end=' ') 450 print("if you put", voltage, "volts through it.") 451 print("-- Lovely plumage, the", type) 452 print("-- It's", state, "!") 453 454accepts one required argument (``voltage``) and three optional arguments 455(``state``, ``action``, and ``type``). This function can be called in any 456of the following ways:: 457 458 parrot(1000) # 1 positional argument 459 parrot(voltage=1000) # 1 keyword argument 460 parrot(voltage=1000000, action='VOOOOOM') # 2 keyword arguments 461 parrot(action='VOOOOOM', voltage=1000000) # 2 keyword arguments 462 parrot('a million', 'bereft of life', 'jump') # 3 positional arguments 463 parrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword 464 465but all the following calls would be invalid:: 466 467 parrot() # required argument missing 468 parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument 469 parrot(110, voltage=220) # duplicate value for the same argument 470 parrot(actor='John Cleese') # unknown keyword argument 471 472In a function call, keyword arguments must follow positional arguments. 473All the keyword arguments passed must match one of the arguments 474accepted by the function (e.g. ``actor`` is not a valid argument for the 475``parrot`` function), and their order is not important. This also includes 476non-optional arguments (e.g. ``parrot(voltage=1000)`` is valid too). 477No argument may receive a value more than once. 478Here's an example that fails due to this restriction:: 479 480 >>> def function(a): 481 ... pass 482 ... 483 >>> function(0, a=0) 484 Traceback (most recent call last): 485 File "<stdin>", line 1, in <module> 486 TypeError: function() got multiple values for keyword argument 'a' 487 488When a final formal parameter of the form ``**name`` is present, it receives a 489dictionary (see :ref:`typesmapping`) containing all keyword arguments except for 490those corresponding to a formal parameter. This may be combined with a formal 491parameter of the form ``*name`` (described in the next subsection) which 492receives a :ref:`tuple <tut-tuples>` containing the positional 493arguments beyond the formal parameter list. (``*name`` must occur 494before ``**name``.) For example, if we define a function like this:: 495 496 def cheeseshop(kind, *arguments, **keywords): 497 print("-- Do you have any", kind, "?") 498 print("-- I'm sorry, we're all out of", kind) 499 for arg in arguments: 500 print(arg) 501 print("-" * 40) 502 for kw in keywords: 503 print(kw, ":", keywords[kw]) 504 505It could be called like this:: 506 507 cheeseshop("Limburger", "It's very runny, sir.", 508 "It's really very, VERY runny, sir.", 509 shopkeeper="Michael Palin", 510 client="John Cleese", 511 sketch="Cheese Shop Sketch") 512 513and of course it would print: 514 515.. code-block:: none 516 517 -- Do you have any Limburger ? 518 -- I'm sorry, we're all out of Limburger 519 It's very runny, sir. 520 It's really very, VERY runny, sir. 521 ---------------------------------------- 522 shopkeeper : Michael Palin 523 client : John Cleese 524 sketch : Cheese Shop Sketch 525 526Note that the order in which the keyword arguments are printed is guaranteed 527to match the order in which they were provided in the function call. 528 529Special parameters 530------------------ 531 532By default, arguments may be passed to a Python function either by position 533or explicitly by keyword. For readability and performance, it makes sense to 534restrict the way arguments can be passed so that a developer need only look 535at the function definition to determine if items are passed by position, by 536position or keyword, or by keyword. 537 538A function definition may look like: 539 540.. code-block:: none 541 542 def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): 543 ----------- ---------- ---------- 544 | | | 545 | Positional or keyword | 546 | - Keyword only 547 -- Positional only 548 549where ``/`` and ``*`` are optional. If used, these symbols indicate the kind of 550parameter by how the arguments may be passed to the function: 551positional-only, positional-or-keyword, and keyword-only. Keyword parameters 552are also referred to as named parameters. 553 554------------------------------- 555Positional-or-Keyword Arguments 556------------------------------- 557 558If ``/`` and ``*`` are not present in the function definition, arguments may 559be passed to a function by position or by keyword. 560 561-------------------------- 562Positional-Only Parameters 563-------------------------- 564 565Looking at this in a bit more detail, it is possible to mark certain parameters 566as *positional-only*. If *positional-only*, the parameters' order matters, and 567the parameters cannot be passed by keyword. Positional-only parameters are 568placed before a ``/`` (forward-slash). The ``/`` is used to logically 569separate the positional-only parameters from the rest of the parameters. 570If there is no ``/`` in the function definition, there are no positional-only 571parameters. 572 573Parameters following the ``/`` may be *positional-or-keyword* or *keyword-only*. 574 575---------------------- 576Keyword-Only Arguments 577---------------------- 578 579To mark parameters as *keyword-only*, indicating the parameters must be passed 580by keyword argument, place an ``*`` in the arguments list just before the first 581*keyword-only* parameter. 582 583----------------- 584Function Examples 585----------------- 586 587Consider the following example function definitions paying close attention to the 588markers ``/`` and ``*``:: 589 590 >>> def standard_arg(arg): 591 ... print(arg) 592 ... 593 >>> def pos_only_arg(arg, /): 594 ... print(arg) 595 ... 596 >>> def kwd_only_arg(*, arg): 597 ... print(arg) 598 ... 599 >>> def combined_example(pos_only, /, standard, *, kwd_only): 600 ... print(pos_only, standard, kwd_only) 601 602 603The first function definition, ``standard_arg``, the most familiar form, 604places no restrictions on the calling convention and arguments may be 605passed by position or keyword:: 606 607 >>> standard_arg(2) 608 2 609 610 >>> standard_arg(arg=2) 611 2 612 613The second function ``pos_only_arg`` is restricted to only use positional 614parameters as there is a ``/`` in the function definition:: 615 616 >>> pos_only_arg(1) 617 1 618 619 >>> pos_only_arg(arg=1) 620 Traceback (most recent call last): 621 File "<stdin>", line 1, in <module> 622 TypeError: pos_only_arg() got an unexpected keyword argument 'arg' 623 624The third function ``kwd_only_args`` only allows keyword arguments as indicated 625by a ``*`` in the function definition:: 626 627 >>> kwd_only_arg(3) 628 Traceback (most recent call last): 629 File "<stdin>", line 1, in <module> 630 TypeError: kwd_only_arg() takes 0 positional arguments but 1 was given 631 632 >>> kwd_only_arg(arg=3) 633 3 634 635And the last uses all three calling conventions in the same function 636definition:: 637 638 >>> combined_example(1, 2, 3) 639 Traceback (most recent call last): 640 File "<stdin>", line 1, in <module> 641 TypeError: combined_example() takes 2 positional arguments but 3 were given 642 643 >>> combined_example(1, 2, kwd_only=3) 644 1 2 3 645 646 >>> combined_example(1, standard=2, kwd_only=3) 647 1 2 3 648 649 >>> combined_example(pos_only=1, standard=2, kwd_only=3) 650 Traceback (most recent call last): 651 File "<stdin>", line 1, in <module> 652 TypeError: combined_example() got an unexpected keyword argument 'pos_only' 653 654 655Finally, consider this function definition which has a potential collision between the positional argument ``name`` and ``**kwds`` which has ``name`` as a key:: 656 657 def foo(name, **kwds): 658 return 'name' in kwds 659 660There is no possible call that will make it return ``True`` as the keyword ``'name'`` 661will always bind to the first parameter. For example:: 662 663 >>> foo(1, **{'name': 2}) 664 Traceback (most recent call last): 665 File "<stdin>", line 1, in <module> 666 TypeError: foo() got multiple values for argument 'name' 667 >>> 668 669But using ``/`` (positional only arguments), it is possible since it allows ``name`` as a positional argument and ``'name'`` as a key in the keyword arguments:: 670 671 def foo(name, /, **kwds): 672 return 'name' in kwds 673 >>> foo(1, **{'name': 2}) 674 True 675 676In other words, the names of positional-only parameters can be used in 677``**kwds`` without ambiguity. 678 679----- 680Recap 681----- 682 683The use case will determine which parameters to use in the function definition:: 684 685 def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2): 686 687As guidance: 688 689* Use positional-only if you want the name of the parameters to not be 690 available to the user. This is useful when parameter names have no real 691 meaning, if you want to enforce the order of the arguments when the function 692 is called or if you need to take some positional parameters and arbitrary 693 keywords. 694* Use keyword-only when names have meaning and the function definition is 695 more understandable by being explicit with names or you want to prevent 696 users relying on the position of the argument being passed. 697* For an API, use positional-only to prevent breaking API changes 698 if the parameter's name is modified in the future. 699 700.. _tut-arbitraryargs: 701 702Arbitrary Argument Lists 703------------------------ 704 705.. index:: 706 single: * (asterisk); in function calls 707 708Finally, the least frequently used option is to specify that a function can be 709called with an arbitrary number of arguments. These arguments will be wrapped 710up in a tuple (see :ref:`tut-tuples`). Before the variable number of arguments, 711zero or more normal arguments may occur. :: 712 713 def write_multiple_items(file, separator, *args): 714 file.write(separator.join(args)) 715 716 717Normally, these ``variadic`` arguments will be last in the list of formal 718parameters, because they scoop up all remaining input arguments that are 719passed to the function. Any formal parameters which occur after the ``*args`` 720parameter are 'keyword-only' arguments, meaning that they can only be used as 721keywords rather than positional arguments. :: 722 723 >>> def concat(*args, sep="/"): 724 ... return sep.join(args) 725 ... 726 >>> concat("earth", "mars", "venus") 727 'earth/mars/venus' 728 >>> concat("earth", "mars", "venus", sep=".") 729 'earth.mars.venus' 730 731.. _tut-unpacking-arguments: 732 733Unpacking Argument Lists 734------------------------ 735 736The reverse situation occurs when the arguments are already in a list or tuple 737but need to be unpacked for a function call requiring separate positional 738arguments. For instance, the built-in :func:`range` function expects separate 739*start* and *stop* arguments. If they are not available separately, write the 740function call with the ``*``\ -operator to unpack the arguments out of a list 741or tuple:: 742 743 >>> list(range(3, 6)) # normal call with separate arguments 744 [3, 4, 5] 745 >>> args = [3, 6] 746 >>> list(range(*args)) # call with arguments unpacked from a list 747 [3, 4, 5] 748 749.. index:: 750 single: **; in function calls 751 752In the same fashion, dictionaries can deliver keyword arguments with the 753``**``\ -operator:: 754 755 >>> def parrot(voltage, state='a stiff', action='voom'): 756 ... print("-- This parrot wouldn't", action, end=' ') 757 ... print("if you put", voltage, "volts through it.", end=' ') 758 ... print("E's", state, "!") 759 ... 760 >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"} 761 >>> parrot(**d) 762 -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised ! 763 764 765.. _tut-lambda: 766 767Lambda Expressions 768------------------ 769 770Small anonymous functions can be created with the :keyword:`lambda` keyword. 771This function returns the sum of its two arguments: ``lambda a, b: a+b``. 772Lambda functions can be used wherever function objects are required. They are 773syntactically restricted to a single expression. Semantically, they are just 774syntactic sugar for a normal function definition. Like nested function 775definitions, lambda functions can reference variables from the containing 776scope:: 777 778 >>> def make_incrementor(n): 779 ... return lambda x: x + n 780 ... 781 >>> f = make_incrementor(42) 782 >>> f(0) 783 42 784 >>> f(1) 785 43 786 787The above example uses a lambda expression to return a function. Another use 788is to pass a small function as an argument:: 789 790 >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] 791 >>> pairs.sort(key=lambda pair: pair[1]) 792 >>> pairs 793 [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] 794 795 796.. _tut-docstrings: 797 798Documentation Strings 799--------------------- 800 801.. index:: 802 single: docstrings 803 single: documentation strings 804 single: strings, documentation 805 806Here are some conventions about the content and formatting of documentation 807strings. 808 809The first line should always be a short, concise summary of the object's 810purpose. For brevity, it should not explicitly state the object's name or type, 811since these are available by other means (except if the name happens to be a 812verb describing a function's operation). This line should begin with a capital 813letter and end with a period. 814 815If there are more lines in the documentation string, the second line should be 816blank, visually separating the summary from the rest of the description. The 817following lines should be one or more paragraphs describing the object's calling 818conventions, its side effects, etc. 819 820The Python parser does not strip indentation from multi-line string literals in 821Python, so tools that process documentation have to strip indentation if 822desired. This is done using the following convention. The first non-blank line 823*after* the first line of the string determines the amount of indentation for 824the entire documentation string. (We can't use the first line since it is 825generally adjacent to the string's opening quotes so its indentation is not 826apparent in the string literal.) Whitespace "equivalent" to this indentation is 827then stripped from the start of all lines of the string. Lines that are 828indented less should not occur, but if they occur all their leading whitespace 829should be stripped. Equivalence of whitespace should be tested after expansion 830of tabs (to 8 spaces, normally). 831 832Here is an example of a multi-line docstring:: 833 834 >>> def my_function(): 835 ... """Do nothing, but document it. 836 ... 837 ... No, really, it doesn't do anything. 838 ... """ 839 ... pass 840 ... 841 >>> print(my_function.__doc__) 842 Do nothing, but document it. 843 844 No, really, it doesn't do anything. 845 846 847.. _tut-annotations: 848 849Function Annotations 850-------------------- 851 852.. sectionauthor:: Zachary Ware <zachary.ware@gmail.com> 853.. index:: 854 pair: function; annotations 855 single: ->; function annotations 856 single: : (colon); function annotations 857 858:ref:`Function annotations <function>` are completely optional metadata 859information about the types used by user-defined functions (see :pep:`3107` and 860:pep:`484` for more information). 861 862:term:`Annotations <function annotation>` are stored in the :attr:`__annotations__` 863attribute of the function as a dictionary and have no effect on any other part of the 864function. Parameter annotations are defined by a colon after the parameter name, followed 865by an expression evaluating to the value of the annotation. Return annotations are 866defined by a literal ``->``, followed by an expression, between the parameter 867list and the colon denoting the end of the :keyword:`def` statement. The 868following example has a positional argument, a keyword argument, and the return 869value annotated:: 870 871 >>> def f(ham: str, eggs: str = 'eggs') -> str: 872 ... print("Annotations:", f.__annotations__) 873 ... print("Arguments:", ham, eggs) 874 ... return ham + ' and ' + eggs 875 ... 876 >>> f('spam') 877 Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>} 878 Arguments: spam eggs 879 'spam and eggs' 880 881.. _tut-codingstyle: 882 883Intermezzo: Coding Style 884======================== 885 886.. sectionauthor:: Georg Brandl <georg@python.org> 887.. index:: pair: coding; style 888 889Now that you are about to write longer, more complex pieces of Python, it is a 890good time to talk about *coding style*. Most languages can be written (or more 891concise, *formatted*) in different styles; some are more readable than others. 892Making it easy for others to read your code is always a good idea, and adopting 893a nice coding style helps tremendously for that. 894 895For Python, :pep:`8` has emerged as the style guide that most projects adhere to; 896it promotes a very readable and eye-pleasing coding style. Every Python 897developer should read it at some point; here are the most important points 898extracted for you: 899 900* Use 4-space indentation, and no tabs. 901 902 4 spaces are a good compromise between small indentation (allows greater 903 nesting depth) and large indentation (easier to read). Tabs introduce 904 confusion, and are best left out. 905 906* Wrap lines so that they don't exceed 79 characters. 907 908 This helps users with small displays and makes it possible to have several 909 code files side-by-side on larger displays. 910 911* Use blank lines to separate functions and classes, and larger blocks of 912 code inside functions. 913 914* When possible, put comments on a line of their own. 915 916* Use docstrings. 917 918* Use spaces around operators and after commas, but not directly inside 919 bracketing constructs: ``a = f(1, 2) + g(3, 4)``. 920 921* Name your classes and functions consistently; the convention is to use 922 ``UpperCamelCase`` for classes and ``lowercase_with_underscores`` for functions 923 and methods. Always use ``self`` as the name for the first method argument 924 (see :ref:`tut-firstclasses` for more on classes and methods). 925 926* Don't use fancy encodings if your code is meant to be used in international 927 environments. Python's default, UTF-8, or even plain ASCII work best in any 928 case. 929 930* Likewise, don't use non-ASCII characters in identifiers if there is only the 931 slightest chance people speaking a different language will read or maintain 932 the code. 933 934 935.. rubric:: Footnotes 936 937.. [#] Actually, *call by object reference* would be a better description, 938 since if a mutable object is passed, the caller will see any changes the 939 callee makes to it (items inserted into a list). 940