blob: 0f72d3d84988180a56cf7362e77a6e4f10261988 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001.. _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 >>> if x < 0:
21 ... x = 0
22 ... print 'Negative changed to zero'
23 ... elif x == 0:
24 ... print 'Zero'
25 ... elif x == 1:
26 ... print 'Single'
27 ... else:
28 ... print 'More'
29 ...
30
31There can be zero or more :keyword:`elif` parts, and the :keyword:`else` part is
32optional. The keyword ':keyword:`elif`' is short for 'else if', and is useful
33to avoid excessive indentation. An :keyword:`if` ... :keyword:`elif` ...
34:keyword:`elif` ... sequence is a substitute for the :keyword:`switch` or
35:keyword:`case` statements found in other languages.
36
37.. % Weird spacings happen here if the wrapping of the source text
38.. % gets changed in the wrong way.
39
40
41.. _tut-for:
42
43:keyword:`for` Statements
44=========================
45
46.. index::
47 statement: for
48 statement: for
49
50The :keyword:`for` statement in Python differs a bit from what you may be used
51to in C or Pascal. Rather than always iterating over an arithmetic progression
52of numbers (like in Pascal), or giving the user the ability to define both the
53iteration step and halting condition (as C), Python's :keyword:`for` statement
54iterates over the items of any sequence (a list or a string), in the order that
55they appear in the sequence. For example (no pun intended):
56
57.. % One suggestion was to give a real C example here, but that may only
58.. % serve to confuse non-C programmers.
59
60::
61
62 >>> # Measure some strings:
63 ... a = ['cat', 'window', 'defenestrate']
64 >>> for x in a:
65 ... print x, len(x)
66 ...
67 cat 3
68 window 6
69 defenestrate 12
70
71It is not safe to modify the sequence being iterated over in the loop (this can
72only happen for mutable sequence types, such as lists). If you need to modify
73the list you are iterating over (for example, to duplicate selected items) you
74must iterate over a copy. The slice notation makes this particularly
75convenient::
76
77 >>> for x in a[:]: # make a slice copy of the entire list
78 ... if len(x) > 6: a.insert(0, x)
79 ...
80 >>> a
81 ['defenestrate', 'cat', 'window', 'defenestrate']
82
83
84.. _tut-range:
85
86The :func:`range` Function
87==========================
88
89If you do need to iterate over a sequence of numbers, the built-in function
90:func:`range` comes in handy. It generates lists containing arithmetic
91progressions::
92
93 >>> range(10)
94 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
95
96The given end point is never part of the generated list; ``range(10)`` generates
97a list of 10 values, the legal indices for items of a sequence of length 10. It
98is possible to let the range start at another number, or to specify a different
99increment (even negative; sometimes this is called the 'step')::
100
101 >>> range(5, 10)
102 [5, 6, 7, 8, 9]
103 >>> range(0, 10, 3)
104 [0, 3, 6, 9]
105 >>> range(-10, -100, -30)
106 [-10, -40, -70]
107
108To iterate over the indices of a sequence, combine :func:`range` and :func:`len`
109as follows::
110
111 >>> a = ['Mary', 'had', 'a', 'little', 'lamb']
112 >>> for i in range(len(a)):
113 ... print i, a[i]
114 ...
115 0 Mary
116 1 had
117 2 a
118 3 little
119 4 lamb
120
121
122.. _tut-break:
123
124:keyword:`break` and :keyword:`continue` Statements, and :keyword:`else` Clauses on Loops
125=========================================================================================
126
127The :keyword:`break` statement, like in C, breaks out of the smallest enclosing
128:keyword:`for` or :keyword:`while` loop.
129
130The :keyword:`continue` statement, also borrowed from C, continues with the next
131iteration of the loop.
132
133Loop statements may have an ``else`` clause; it is executed when the loop
134terminates through exhaustion of the list (with :keyword:`for`) or when the
135condition becomes false (with :keyword:`while`), but not when the loop is
136terminated by a :keyword:`break` statement. This is exemplified by the
137following loop, which searches for prime numbers::
138
139 >>> for n in range(2, 10):
140 ... for x in range(2, n):
141 ... if n % x == 0:
142 ... print n, 'equals', x, '*', n/x
143 ... break
144 ... else:
145 ... # loop fell through without finding a factor
146 ... print n, 'is a prime number'
147 ...
148 2 is a prime number
149 3 is a prime number
150 4 equals 2 * 2
151 5 is a prime number
152 6 equals 2 * 3
153 7 is a prime number
154 8 equals 2 * 4
155 9 equals 3 * 3
156
157
158.. _tut-pass:
159
160:keyword:`pass` Statements
161==========================
162
163The :keyword:`pass` statement does nothing. It can be used when a statement is
164required syntactically but the program requires no action. For example::
165
166 >>> while True:
167 ... pass # Busy-wait for keyboard interrupt
168 ...
169
170
171.. _tut-functions:
172
173Defining Functions
174==================
175
176We can create a function that writes the Fibonacci series to an arbitrary
177boundary::
178
179 >>> def fib(n): # write Fibonacci series up to n
180 ... """Print a Fibonacci series up to n."""
181 ... a, b = 0, 1
182 ... while b < n:
183 ... print b,
184 ... a, b = b, a+b
185 ...
186 >>> # Now call the function we just defined:
187 ... fib(2000)
188 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
189
190.. index::
191 single: documentation strings
192 single: docstrings
193 single: strings, documentation
194
195The keyword :keyword:`def` introduces a function *definition*. It must be
196followed by the function name and the parenthesized list of formal parameters.
197The statements that form the body of the function start at the next line, and
198must be indented. The first statement of the function body can optionally be a
199string literal; this string literal is the function's documentation string, or
200:dfn:`docstring`.
201
202There are tools which use docstrings to automatically produce online or printed
203documentation, or to let the user interactively browse through code; it's good
204practice to include docstrings in code that you write, so try to make a habit of
205it.
206
207The *execution* of a function introduces a new symbol table used for the local
208variables of the function. More precisely, all variable assignments in a
209function store the value in the local symbol table; whereas variable references
210first look in the local symbol table, then in the global symbol table, and then
211in the table of built-in names. Thus, global variables cannot be directly
212assigned a value within a function (unless named in a :keyword:`global`
213statement), although they may be referenced.
214
215The actual parameters (arguments) to a function call are introduced in the local
216symbol table of the called function when it is called; thus, arguments are
217passed using *call by value* (where the *value* is always an object *reference*,
218not the value of the object). [#]_ When a function calls another function, a new
219local symbol table is created for that call.
220
221A function definition introduces the function name in the current symbol table.
222The value of the function name has a type that is recognized by the interpreter
223as a user-defined function. This value can be assigned to another name which
224can then also be used as a function. This serves as a general renaming
225mechanism::
226
227 >>> fib
228 <function fib at 10042ed0>
229 >>> f = fib
230 >>> f(100)
231 1 1 2 3 5 8 13 21 34 55 89
232
233You might object that ``fib`` is not a function but a procedure. In Python,
234like in C, procedures are just functions that don't return a value. In fact,
235technically speaking, procedures do return a value, albeit a rather boring one.
236This value is called ``None`` (it's a built-in name). Writing the value
237``None`` is normally suppressed by the interpreter if it would be the only value
Georg Brandl706132b2007-10-30 17:57:12 +0000238written. You can see it if you really want to using :keyword:`print`::
Georg Brandl8ec7f652007-08-15 14:28:01 +0000239
Georg Brandl706132b2007-10-30 17:57:12 +0000240 >>> fib(0)
Georg Brandl8ec7f652007-08-15 14:28:01 +0000241 >>> print fib(0)
242 None
243
244It is simple to write a function that returns a list of the numbers of the
245Fibonacci series, instead of printing it::
246
247 >>> def fib2(n): # return Fibonacci series up to n
248 ... """Return a list containing the Fibonacci series up to n."""
249 ... result = []
250 ... a, b = 0, 1
251 ... while b < n:
252 ... result.append(b) # see below
253 ... a, b = b, a+b
254 ... return result
255 ...
256 >>> f100 = fib2(100) # call it
257 >>> f100 # write the result
258 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
259
260This example, as usual, demonstrates some new Python features:
261
262* The :keyword:`return` statement returns with a value from a function.
263 :keyword:`return` without an expression argument returns ``None``. Falling off
264 the end of a procedure also returns ``None``.
265
266* The statement ``result.append(b)`` calls a *method* of the list object
267 ``result``. A method is a function that 'belongs' to an object and is named
268 ``obj.methodname``, where ``obj`` is some object (this may be an expression),
269 and ``methodname`` is the name of a method that is defined by the object's type.
270 Different types define different methods. Methods of different types may have
271 the same name without causing ambiguity. (It is possible to define your own
272 object types and methods, using *classes*, as discussed later in this tutorial.)
273 The method :meth:`append` shown in the example is defined for list objects; it
274 adds a new element at the end of the list. In this example it is equivalent to
275 ``result = result + [b]``, but more efficient.
276
277
278.. _tut-defining:
279
280More on Defining Functions
281==========================
282
283It is also possible to define functions with a variable number of arguments.
284There are three forms, which can be combined.
285
286
287.. _tut-defaultargs:
288
289Default Argument Values
290-----------------------
291
292The most useful form is to specify a default value for one or more arguments.
293This creates a function that can be called with fewer arguments than it is
294defined to allow. For example::
295
296 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
297 while True:
298 ok = raw_input(prompt)
299 if ok in ('y', 'ye', 'yes'): return True
300 if ok in ('n', 'no', 'nop', 'nope'): return False
301 retries = retries - 1
302 if retries < 0: raise IOError, 'refusenik user'
303 print complaint
304
305This function can be called either like this: ``ask_ok('Do you really want to
306quit?')`` or like this: ``ask_ok('OK to overwrite the file?', 2)``.
307
308This example also introduces the :keyword:`in` keyword. This tests whether or
309not a sequence contains a certain value.
310
311The default values are evaluated at the point of function definition in the
312*defining* scope, so that ::
313
314 i = 5
315
316 def f(arg=i):
317 print arg
318
319 i = 6
320 f()
321
322will print ``5``.
323
324**Important warning:** The default value is evaluated only once. This makes a
325difference when the default is a mutable object such as a list, dictionary, or
326instances of most classes. For example, the following function accumulates the
327arguments passed to it on subsequent calls::
328
329 def f(a, L=[]):
330 L.append(a)
331 return L
332
333 print f(1)
334 print f(2)
335 print f(3)
336
337This will print ::
338
339 [1]
340 [1, 2]
341 [1, 2, 3]
342
343If you don't want the default to be shared between subsequent calls, you can
344write the function like this instead::
345
346 def f(a, L=None):
347 if L is None:
348 L = []
349 L.append(a)
350 return L
351
352
353.. _tut-keywordargs:
354
355Keyword Arguments
356-----------------
357
358Functions can also be called using keyword arguments of the form ``keyword =
359value``. For instance, the following function::
360
361 def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
362 print "-- This parrot wouldn't", action,
363 print "if you put", voltage, "volts through it."
364 print "-- Lovely plumage, the", type
365 print "-- It's", state, "!"
366
367could be called in any of the following ways::
368
369 parrot(1000)
370 parrot(action = 'VOOOOOM', voltage = 1000000)
371 parrot('a thousand', state = 'pushing up the daisies')
372 parrot('a million', 'bereft of life', 'jump')
373
374but the following calls would all be invalid::
375
376 parrot() # required argument missing
377 parrot(voltage=5.0, 'dead') # non-keyword argument following keyword
378 parrot(110, voltage=220) # duplicate value for argument
379 parrot(actor='John Cleese') # unknown keyword
380
381In general, an argument list must have any positional arguments followed by any
382keyword arguments, where the keywords must be chosen from the formal parameter
383names. It's not important whether a formal parameter has a default value or
384not. No argument may receive a value more than once --- formal parameter names
385corresponding to positional arguments cannot be used as keywords in the same
386calls. Here's an example that fails due to this restriction::
387
388 >>> def function(a):
389 ... pass
390 ...
391 >>> function(0, a=0)
392 Traceback (most recent call last):
393 File "<stdin>", line 1, in ?
394 TypeError: function() got multiple values for keyword argument 'a'
395
396When a final formal parameter of the form ``**name`` is present, it receives a
397dictionary (see :ref:`typesmapping`) containing all keyword arguments except for
398those corresponding to a formal parameter. This may be combined with a formal
399parameter of the form ``*name`` (described in the next subsection) which
400receives a tuple containing the positional arguments beyond the formal parameter
401list. (``*name`` must occur before ``**name``.) For example, if we define a
402function like this::
403
404 def cheeseshop(kind, *arguments, **keywords):
405 print "-- Do you have any", kind, '?'
406 print "-- I'm sorry, we're all out of", kind
407 for arg in arguments: print arg
408 print '-'*40
409 keys = keywords.keys()
410 keys.sort()
411 for kw in keys: print kw, ':', keywords[kw]
412
413It could be called like this::
414
415 cheeseshop('Limburger', "It's very runny, sir.",
416 "It's really very, VERY runny, sir.",
417 client='John Cleese',
418 shopkeeper='Michael Palin',
419 sketch='Cheese Shop Sketch')
420
421and of course it would print::
422
423 -- Do you have any Limburger ?
424 -- I'm sorry, we're all out of Limburger
425 It's very runny, sir.
426 It's really very, VERY runny, sir.
427 ----------------------------------------
428 client : John Cleese
429 shopkeeper : Michael Palin
430 sketch : Cheese Shop Sketch
431
432Note that the :meth:`sort` method of the list of keyword argument names is
433called before printing the contents of the ``keywords`` dictionary; if this is
434not done, the order in which the arguments are printed is undefined.
435
436
437.. _tut-arbitraryargs:
438
439Arbitrary Argument Lists
440------------------------
441
442Finally, the least frequently used option is to specify that a function can be
443called with an arbitrary number of arguments. These arguments will be wrapped
444up in a tuple. Before the variable number of arguments, zero or more normal
445arguments may occur. ::
446
447 def fprintf(file, format, *args):
448 file.write(format % args)
449
450
451.. _tut-unpacking-arguments:
452
453Unpacking Argument Lists
454------------------------
455
456The reverse situation occurs when the arguments are already in a list or tuple
457but need to be unpacked for a function call requiring separate positional
458arguments. For instance, the built-in :func:`range` function expects separate
459*start* and *stop* arguments. If they are not available separately, write the
460function call with the ``*``\ -operator to unpack the arguments out of a list
461or tuple::
462
463 >>> range(3, 6) # normal call with separate arguments
464 [3, 4, 5]
465 >>> args = [3, 6]
466 >>> range(*args) # call with arguments unpacked from a list
467 [3, 4, 5]
468
469In the same fashion, dictionaries can deliver keyword arguments with the ``**``\
470-operator::
471
472 >>> def parrot(voltage, state='a stiff', action='voom'):
473 ... print "-- This parrot wouldn't", action,
474 ... print "if you put", voltage, "volts through it.",
475 ... print "E's", state, "!"
476 ...
477 >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
478 >>> parrot(**d)
479 -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
480
481
482.. _tut-lambda:
483
484Lambda Forms
485------------
486
487By popular demand, a few features commonly found in functional programming
488languages like Lisp have been added to Python. With the :keyword:`lambda`
489keyword, small anonymous functions can be created. Here's a function that
490returns the sum of its two arguments: ``lambda a, b: a+b``. Lambda forms can be
491used wherever function objects are required. They are syntactically restricted
492to a single expression. Semantically, they are just syntactic sugar for a
493normal function definition. Like nested function definitions, lambda forms can
494reference variables from the containing scope::
495
496 >>> def make_incrementor(n):
497 ... return lambda x: x + n
498 ...
499 >>> f = make_incrementor(42)
500 >>> f(0)
501 42
502 >>> f(1)
503 43
504
505
506.. _tut-docstrings:
507
508Documentation Strings
509---------------------
510
511.. index::
512 single: docstrings
513 single: documentation strings
514 single: strings, documentation
515
516There are emerging conventions about the content and formatting of documentation
517strings.
518
519The first line should always be a short, concise summary of the object's
520purpose. For brevity, it should not explicitly state the object's name or type,
521since these are available by other means (except if the name happens to be a
522verb describing a function's operation). This line should begin with a capital
523letter and end with a period.
524
525If there are more lines in the documentation string, the second line should be
526blank, visually separating the summary from the rest of the description. The
527following lines should be one or more paragraphs describing the object's calling
528conventions, its side effects, etc.
529
530The Python parser does not strip indentation from multi-line string literals in
531Python, so tools that process documentation have to strip indentation if
532desired. This is done using the following convention. The first non-blank line
533*after* the first line of the string determines the amount of indentation for
534the entire documentation string. (We can't use the first line since it is
535generally adjacent to the string's opening quotes so its indentation is not
536apparent in the string literal.) Whitespace "equivalent" to this indentation is
537then stripped from the start of all lines of the string. Lines that are
538indented less should not occur, but if they occur all their leading whitespace
539should be stripped. Equivalence of whitespace should be tested after expansion
540of tabs (to 8 spaces, normally).
541
542Here is an example of a multi-line docstring::
543
544 >>> def my_function():
545 ... """Do nothing, but document it.
546 ...
547 ... No, really, it doesn't do anything.
548 ... """
549 ... pass
550 ...
551 >>> print my_function.__doc__
552 Do nothing, but document it.
553
554 No, really, it doesn't do anything.
555
556
557
558.. rubric:: Footnotes
559
560.. [#] Actually, *call by object reference* would be a better description, since if a
561 mutable object is passed, the caller will see any changes the callee makes to it
562 (items inserted into a list).
563