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