1.. _tut-morecontrol: 2 3*********************** 4More Control Flow Tools 5*********************** 6 7Besides the :keyword:`while` statement just introduced, Python knows the usual 8control flow 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(raw_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 statement: for 48 49The :keyword:`for` statement in Python differs a bit from what you may be used 50to in C or Pascal. Rather than always iterating over an arithmetic progression 51of numbers (like in Pascal), or giving the user the ability to define both the 52iteration step and halting condition (as C), Python's :keyword:`for` statement 53iterates over the items of any sequence (a list or a string), in the order that 54they appear in the sequence. For example (no pun intended): 55 56.. One suggestion was to give a real C example here, but that may only serve to 57 confuse non-C programmers. 58 59:: 60 61 >>> # Measure some strings: 62 ... words = ['cat', 'window', 'defenestrate'] 63 >>> for w in words: 64 ... print w, len(w) 65 ... 66 cat 3 67 window 6 68 defenestrate 12 69 70If you need to modify the sequence you are iterating over while inside the loop 71(for example to duplicate selected items), it is recommended that you first 72make a copy. Iterating over a sequence does not implicitly make a copy. The 73slice notation makes this especially convenient:: 74 75 >>> for w in words[:]: # Loop over a slice copy of the entire list. 76 ... if len(w) > 6: 77 ... words.insert(0, w) 78 ... 79 >>> words 80 ['defenestrate', 'cat', 'window', 'defenestrate'] 81 82 83.. _tut-range: 84 85The :func:`range` Function 86========================== 87 88If you do need to iterate over a sequence of numbers, the built-in function 89:func:`range` comes in handy. It generates lists containing arithmetic 90progressions:: 91 92 >>> range(10) 93 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 94 95The given end point is never part of the generated list; ``range(10)`` generates 96a list of 10 values, the legal indices for items of a sequence of length 10. It 97is possible to let the range start at another number, or to specify a different 98increment (even negative; sometimes this is called the 'step'):: 99 100 >>> range(5, 10) 101 [5, 6, 7, 8, 9] 102 >>> range(0, 10, 3) 103 [0, 3, 6, 9] 104 >>> range(-10, -100, -30) 105 [-10, -40, -70] 106 107To iterate over the indices of a sequence, you can combine :func:`range` and 108:func:`len` as follows:: 109 110 >>> a = ['Mary', 'had', 'a', 'little', 'lamb'] 111 >>> for i in range(len(a)): 112 ... print i, a[i] 113 ... 114 0 Mary 115 1 had 116 2 a 117 3 little 118 4 lamb 119 120In most such cases, however, it is convenient to use the :func:`enumerate` 121function, see :ref:`tut-loopidioms`. 122 123 124.. _tut-break: 125 126:keyword:`break` and :keyword:`continue` Statements, and :keyword:`else` Clauses on Loops 127========================================================================================= 128 129The :keyword:`break` statement, like in C, breaks out of the smallest enclosing 130:keyword:`for` or :keyword:`while` loop. 131 132Loop statements may have an ``else`` clause; it is executed when the loop 133terminates through exhaustion of the list (with :keyword:`for`) or when the 134condition becomes false (with :keyword:`while`), but not when the loop is 135terminated by a :keyword:`break` statement. This is exemplified by the 136following loop, which searches for prime numbers:: 137 138 >>> for n in range(2, 10): 139 ... for x in range(2, n): 140 ... if n % x == 0: 141 ... print n, 'equals', x, '*', n/x 142 ... break 143 ... else: 144 ... # loop fell through without finding a factor 145 ... print n, 'is a prime number' 146 ... 147 2 is a prime number 148 3 is a prime number 149 4 equals 2 * 2 150 5 is a prime number 151 6 equals 2 * 3 152 7 is a prime number 153 8 equals 2 * 4 154 9 equals 3 * 3 155 156(Yes, this is the correct code. Look closely: the ``else`` clause belongs to 157the :keyword:`for` loop, **not** the :keyword:`if` statement.) 158 159When used with a loop, the ``else`` clause has more in common with the 160``else`` clause of a :keyword:`try` statement than it does that of 161:keyword:`if` statements: a :keyword:`try` statement's ``else`` clause runs 162when no exception occurs, and a loop's ``else`` clause runs when no ``break`` 163occurs. For more on the :keyword:`try` statement and exceptions, see 164:ref:`tut-handling`. 165 166The :keyword:`continue` statement, also borrowed from C, continues with the next 167iteration of the loop:: 168 169 >>> for num in range(2, 10): 170 ... if num % 2 == 0: 171 ... print "Found an even number", num 172 ... continue 173 ... print "Found a number", num 174 Found an even number 2 175 Found a number 3 176 Found an even number 4 177 Found a number 5 178 Found an even number 6 179 Found a number 7 180 Found an even number 8 181 Found a number 9 182 183 184.. _tut-pass: 185 186:keyword:`pass` Statements 187========================== 188 189The :keyword:`pass` statement does nothing. It can be used when a statement is 190required syntactically but the program requires no action. For example:: 191 192 >>> while True: 193 ... pass # Busy-wait for keyboard interrupt (Ctrl+C) 194 ... 195 196This is commonly used for creating minimal classes:: 197 198 >>> class MyEmptyClass: 199 ... pass 200 ... 201 202Another place :keyword:`pass` can be used is as a place-holder for a function or 203conditional body when you are working on new code, allowing you to keep thinking 204at a more abstract level. The :keyword:`pass` is silently ignored:: 205 206 >>> def initlog(*args): 207 ... pass # Remember to implement this! 208 ... 209 210.. _tut-functions: 211 212Defining Functions 213================== 214 215We can create a function that writes the Fibonacci series to an arbitrary 216boundary:: 217 218 >>> def fib(n): # write Fibonacci series up to n 219 ... """Print a Fibonacci series up to n.""" 220 ... a, b = 0, 1 221 ... while a < n: 222 ... print a, 223 ... a, b = b, a+b 224 ... 225 >>> # Now call the function we just defined: 226 ... fib(2000) 227 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 228 229.. index:: 230 single: documentation strings 231 single: docstrings 232 single: strings, documentation 233 234The keyword :keyword:`def` introduces a function *definition*. It must be 235followed by the function name and the parenthesized list of formal parameters. 236The statements that form the body of the function start at the next line, and 237must be indented. 238 239The first statement of the function body can optionally be a string literal; 240this string literal is the function's documentation string, or :dfn:`docstring`. 241(More about docstrings can be found in the section :ref:`tut-docstrings`.) 242There are tools which use docstrings to automatically produce online or printed 243documentation, or to let the user interactively browse through code; it's good 244practice to include docstrings in code that you write, so make a habit of it. 245 246The *execution* of a function introduces a new symbol table used for the local 247variables of the function. More precisely, all variable assignments in a 248function store the value in the local symbol table; whereas variable references 249first look in the local symbol table, then in the local symbol tables of 250enclosing functions, then in the global symbol table, and finally in the table 251of built-in names. Thus, global variables cannot be directly assigned a value 252within a function (unless named in a :keyword:`global` statement), although they 253may be referenced. 254 255The actual parameters (arguments) to a function call are introduced in the local 256symbol table of the called function when it is called; thus, arguments are 257passed using *call by value* (where the *value* is always an object *reference*, 258not the value of the object). [#]_ When a function calls another function, a new 259local symbol table is created for that call. 260 261A function definition introduces the function name in the current symbol table. 262The value of the function name has a type that is recognized by the interpreter 263as a user-defined function. This value can be assigned to another name which 264can then also be used as a function. This serves as a general renaming 265mechanism:: 266 267 >>> fib 268 <function fib at 10042ed0> 269 >>> f = fib 270 >>> f(100) 271 0 1 1 2 3 5 8 13 21 34 55 89 272 273Coming from other languages, you might object that ``fib`` is not a function but 274a procedure since it doesn't return a value. In fact, even functions without a 275:keyword:`return` statement do return a value, albeit a rather boring one. This 276value is called ``None`` (it's a built-in name). Writing the value ``None`` is 277normally suppressed by the interpreter if it would be the only value written. 278You can see it if you really want to using :keyword:`print`:: 279 280 >>> fib(0) 281 >>> print fib(0) 282 None 283 284It is simple to write a function that returns a list of the numbers of the 285Fibonacci series, instead of printing it:: 286 287 >>> def fib2(n): # return Fibonacci series up to n 288 ... """Return a list containing the Fibonacci series up to n.""" 289 ... result = [] 290 ... a, b = 0, 1 291 ... while a < n: 292 ... result.append(a) # see below 293 ... a, b = b, a+b 294 ... return result 295 ... 296 >>> f100 = fib2(100) # call it 297 >>> f100 # write the result 298 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] 299 300This example, as usual, demonstrates some new Python features: 301 302* The :keyword:`return` statement returns with a value from a function. 303 :keyword:`return` without an expression argument returns ``None``. Falling off 304 the end of a function also returns ``None``. 305 306* The statement ``result.append(a)`` calls a *method* of the list object 307 ``result``. A method is a function that 'belongs' to an object and is named 308 ``obj.methodname``, where ``obj`` is some object (this may be an expression), 309 and ``methodname`` is the name of a method that is defined by the object's type. 310 Different types define different methods. Methods of different types may have 311 the same name without causing ambiguity. (It is possible to define your own 312 object types and methods, using *classes*, see :ref:`tut-classes`) 313 The method :meth:`append` shown in the example is defined for list objects; it 314 adds a new element at the end of the list. In this example it is equivalent to 315 ``result = result + [a]``, but more efficient. 316 317 318.. _tut-defining: 319 320More on Defining Functions 321========================== 322 323It is also possible to define functions with a variable number of arguments. 324There are three forms, which can be combined. 325 326 327.. _tut-defaultargs: 328 329Default Argument Values 330----------------------- 331 332The most useful form is to specify a default value for one or more arguments. 333This creates a function that can be called with fewer arguments than it is 334defined to allow. For example:: 335 336 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): 337 while True: 338 ok = raw_input(prompt) 339 if ok in ('y', 'ye', 'yes'): 340 return True 341 if ok in ('n', 'no', 'nop', 'nope'): 342 return False 343 retries = retries - 1 344 if retries < 0: 345 raise IOError('refusenik user') 346 print complaint 347 348This function can be called in several ways: 349 350* giving only the mandatory argument: 351 ``ask_ok('Do you really want to quit?')`` 352* giving one of the optional arguments: 353 ``ask_ok('OK to overwrite the file?', 2)`` 354* or even giving all arguments: 355 ``ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')`` 356 357This example also introduces the :keyword:`in` keyword. This tests whether or 358not a sequence contains a certain value. 359 360The default values are evaluated at the point of function definition in the 361*defining* scope, so that :: 362 363 i = 5 364 365 def f(arg=i): 366 print arg 367 368 i = 6 369 f() 370 371will print ``5``. 372 373**Important warning:** The default value is evaluated only once. This makes a 374difference when the default is a mutable object such as a list, dictionary, or 375instances of most classes. For example, the following function accumulates the 376arguments passed to it on subsequent calls:: 377 378 def f(a, L=[]): 379 L.append(a) 380 return L 381 382 print f(1) 383 print f(2) 384 print f(3) 385 386This will print :: 387 388 [1] 389 [1, 2] 390 [1, 2, 3] 391 392If you don't want the default to be shared between subsequent calls, you can 393write the function like this instead:: 394 395 def f(a, L=None): 396 if L is None: 397 L = [] 398 L.append(a) 399 return L 400 401 402.. _tut-keywordargs: 403 404Keyword Arguments 405----------------- 406 407Functions can also be called using :term:`keyword arguments <keyword argument>` 408of the form ``kwarg=value``. For instance, the following function:: 409 410 def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): 411 print "-- This parrot wouldn't", action, 412 print "if you put", voltage, "volts through it." 413 print "-- Lovely plumage, the", type 414 print "-- It's", state, "!" 415 416accepts one required argument (``voltage``) and three optional arguments 417(``state``, ``action``, and ``type``). This function can be called in any 418of the following ways:: 419 420 parrot(1000) # 1 positional argument 421 parrot(voltage=1000) # 1 keyword argument 422 parrot(voltage=1000000, action='VOOOOOM') # 2 keyword arguments 423 parrot(action='VOOOOOM', voltage=1000000) # 2 keyword arguments 424 parrot('a million', 'bereft of life', 'jump') # 3 positional arguments 425 parrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword 426 427but all the following calls would be invalid:: 428 429 parrot() # required argument missing 430 parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument 431 parrot(110, voltage=220) # duplicate value for the same argument 432 parrot(actor='John Cleese') # unknown keyword argument 433 434In a function call, keyword arguments must follow positional arguments. 435All the keyword arguments passed must match one of the arguments 436accepted by the function (e.g. ``actor`` is not a valid argument for the 437``parrot`` function), and their order is not important. This also includes 438non-optional arguments (e.g. ``parrot(voltage=1000)`` is valid too). 439No argument may receive a value more than once. 440Here's an example that fails due to this restriction:: 441 442 >>> def function(a): 443 ... pass 444 ... 445 >>> function(0, a=0) 446 Traceback (most recent call last): 447 File "<stdin>", line 1, in ? 448 TypeError: function() got multiple values for keyword argument 'a' 449 450When a final formal parameter of the form ``**name`` is present, it receives a 451dictionary (see :ref:`typesmapping`) containing all keyword arguments except for 452those corresponding to a formal parameter. This may be combined with a formal 453parameter of the form ``*name`` (described in the next subsection) which 454receives a tuple containing the positional arguments beyond the formal parameter 455list. (``*name`` must occur before ``**name``.) For example, if we define a 456function like this:: 457 458 def cheeseshop(kind, *arguments, **keywords): 459 print "-- Do you have any", kind, "?" 460 print "-- I'm sorry, we're all out of", kind 461 for arg in arguments: 462 print arg 463 print "-" * 40 464 keys = sorted(keywords.keys()) 465 for kw in keys: 466 print kw, ":", keywords[kw] 467 468It could be called like this:: 469 470 cheeseshop("Limburger", "It's very runny, sir.", 471 "It's really very, VERY runny, sir.", 472 shopkeeper='Michael Palin', 473 client="John Cleese", 474 sketch="Cheese Shop Sketch") 475 476and of course it would print: 477 478.. code-block:: none 479 480 -- Do you have any Limburger ? 481 -- I'm sorry, we're all out of Limburger 482 It's very runny, sir. 483 It's really very, VERY runny, sir. 484 ---------------------------------------- 485 client : John Cleese 486 shopkeeper : Michael Palin 487 sketch : Cheese Shop Sketch 488 489Note that the list of keyword argument names is created by sorting the result 490of the keywords dictionary's ``keys()`` method before printing its contents; 491if this is not done, the order in which the arguments are printed is undefined. 492 493.. _tut-arbitraryargs: 494 495Arbitrary Argument Lists 496------------------------ 497 498.. index:: 499 statement: * 500 501Finally, the least frequently used option is to specify that a function can be 502called with an arbitrary number of arguments. These arguments will be wrapped 503up in a tuple (see :ref:`tut-tuples`). Before the variable number of arguments, 504zero or more normal arguments may occur. :: 505 506 def write_multiple_items(file, separator, *args): 507 file.write(separator.join(args)) 508 509 510.. _tut-unpacking-arguments: 511 512Unpacking Argument Lists 513------------------------ 514 515The reverse situation occurs when the arguments are already in a list or tuple 516but need to be unpacked for a function call requiring separate positional 517arguments. For instance, the built-in :func:`range` function expects separate 518*start* and *stop* arguments. If they are not available separately, write the 519function call with the ``*``\ -operator to unpack the arguments out of a list 520or tuple:: 521 522 >>> range(3, 6) # normal call with separate arguments 523 [3, 4, 5] 524 >>> args = [3, 6] 525 >>> range(*args) # call with arguments unpacked from a list 526 [3, 4, 5] 527 528.. index:: 529 statement: ** 530 531In the same fashion, dictionaries can deliver keyword arguments with the ``**``\ 532-operator:: 533 534 >>> def parrot(voltage, state='a stiff', action='voom'): 535 ... print "-- This parrot wouldn't", action, 536 ... print "if you put", voltage, "volts through it.", 537 ... print "E's", state, "!" 538 ... 539 >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"} 540 >>> parrot(**d) 541 -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised ! 542 543 544.. _tut-lambda: 545 546Lambda Expressions 547------------------ 548 549Small anonymous functions can be created with the :keyword:`lambda` keyword. 550This function returns the sum of its two arguments: ``lambda a, b: a+b``. 551Lambda functions can be used wherever function objects are required. They are 552syntactically restricted to a single expression. Semantically, they are just 553syntactic sugar for a normal function definition. Like nested function 554definitions, lambda functions can reference variables from the containing 555scope:: 556 557 >>> def make_incrementor(n): 558 ... return lambda x: x + n 559 ... 560 >>> f = make_incrementor(42) 561 >>> f(0) 562 42 563 >>> f(1) 564 43 565 566The above example uses a lambda expression to return a function. Another use 567is to pass a small function as an argument:: 568 569 >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] 570 >>> pairs.sort(key=lambda pair: pair[1]) 571 >>> pairs 572 [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] 573 574 575.. _tut-docstrings: 576 577Documentation Strings 578--------------------- 579 580.. index:: 581 single: docstrings 582 single: documentation strings 583 single: strings, documentation 584 585There are emerging conventions about the content and formatting of documentation 586strings. 587 588The first line should always be a short, concise summary of the object's 589purpose. For brevity, it should not explicitly state the object's name or type, 590since these are available by other means (except if the name happens to be a 591verb describing a function's operation). This line should begin with a capital 592letter and end with a period. 593 594If there are more lines in the documentation string, the second line should be 595blank, visually separating the summary from the rest of the description. The 596following lines should be one or more paragraphs describing the object's calling 597conventions, its side effects, etc. 598 599The Python parser does not strip indentation from multi-line string literals in 600Python, so tools that process documentation have to strip indentation if 601desired. This is done using the following convention. The first non-blank line 602*after* the first line of the string determines the amount of indentation for 603the entire documentation string. (We can't use the first line since it is 604generally adjacent to the string's opening quotes so its indentation is not 605apparent in the string literal.) Whitespace "equivalent" to this indentation is 606then stripped from the start of all lines of the string. Lines that are 607indented less should not occur, but if they occur all their leading whitespace 608should be stripped. Equivalence of whitespace should be tested after expansion 609of tabs (to 8 spaces, normally). 610 611Here is an example of a multi-line docstring:: 612 613 >>> def my_function(): 614 ... """Do nothing, but document it. 615 ... 616 ... No, really, it doesn't do anything. 617 ... """ 618 ... pass 619 ... 620 >>> print my_function.__doc__ 621 Do nothing, but document it. 622 623 No, really, it doesn't do anything. 624 625 626.. _tut-codingstyle: 627 628Intermezzo: Coding Style 629======================== 630 631.. sectionauthor:: Georg Brandl <georg@python.org> 632.. index:: pair: coding; style 633 634Now that you are about to write longer, more complex pieces of Python, it is a 635good time to talk about *coding style*. Most languages can be written (or more 636concise, *formatted*) in different styles; some are more readable than others. 637Making it easy for others to read your code is always a good idea, and adopting 638a nice coding style helps tremendously for that. 639 640For Python, :pep:`8` has emerged as the style guide that most projects adhere to; 641it promotes a very readable and eye-pleasing coding style. Every Python 642developer should read it at some point; here are the most important points 643extracted for you: 644 645* Use 4-space indentation, and no tabs. 646 647 4 spaces are a good compromise between small indentation (allows greater 648 nesting depth) and large indentation (easier to read). Tabs introduce 649 confusion, and are best left out. 650 651* Wrap lines so that they don't exceed 79 characters. 652 653 This helps users with small displays and makes it possible to have several 654 code files side-by-side on larger displays. 655 656* Use blank lines to separate functions and classes, and larger blocks of 657 code inside functions. 658 659* When possible, put comments on a line of their own. 660 661* Use docstrings. 662 663* Use spaces around operators and after commas, but not directly inside 664 bracketing constructs: ``a = f(1, 2) + g(3, 4)``. 665 666* Name your classes and functions consistently; the convention is to use 667 ``CamelCase`` for classes and ``lower_case_with_underscores`` for functions 668 and methods. Always use ``self`` as the name for the first method argument 669 (see :ref:`tut-firstclasses` for more on classes and methods). 670 671* Don't use fancy encodings if your code is meant to be used in international 672 environments. Plain ASCII works best in any case. 673 674 675.. rubric:: Footnotes 676 677.. [#] Actually, *call by object reference* would be a better description, 678 since if a mutable object is passed, the caller will see any changes the 679 callee makes to it (items inserted into a list). 680 681