blob: a8197566026122296272fa90e7ee528cae21ec08 [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001.. _tut-morecontrol:
2
3***********************
4More Control Flow Tools
5***********************
6
Diego Alberto Barriga Martínezb5748132019-09-17 11:57:55 -05007Besides the :keyword:`while` statement just introduced, Python uses the usual
8flow control statements known from other languages, with some twists.
Georg Brandl116aa622007-08-15 14:28:22 +00009
10
11.. _tut-if:
12
Serhiy Storchaka2b57c432018-12-19 08:09:46 +020013:keyword:`!if` Statements
14=========================
Georg Brandl116aa622007-08-15 14:28:22 +000015
16Perhaps the most well-known statement type is the :keyword:`if` statement. For
17example::
18
Georg Brandle9af2842007-08-17 05:54:09 +000019 >>> x = int(input("Please enter an integer: "))
Georg Brandl5d955ed2008-09-13 17:18:21 +000020 Please enter an integer: 42
Georg Brandl116aa622007-08-15 14:28:22 +000021 >>> if x < 0:
Ezio Melottie65cb192013-11-17 22:07:48 +020022 ... x = 0
23 ... print('Negative changed to zero')
Georg Brandl116aa622007-08-15 14:28:22 +000024 ... elif x == 0:
Ezio Melottie65cb192013-11-17 22:07:48 +020025 ... print('Zero')
Georg Brandl116aa622007-08-15 14:28:22 +000026 ... elif x == 1:
Ezio Melottie65cb192013-11-17 22:07:48 +020027 ... print('Single')
Georg Brandl116aa622007-08-15 14:28:22 +000028 ... else:
Ezio Melottie65cb192013-11-17 22:07:48 +020029 ... print('More')
Georg Brandl5d955ed2008-09-13 17:18:21 +000030 ...
31 More
Georg Brandl116aa622007-08-15 14:28:22 +000032
33There can be zero or more :keyword:`elif` parts, and the :keyword:`else` part is
Serhiy Storchaka2b57c432018-12-19 08:09:46 +020034optional. 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
Christian Heimes5b5e81c2007-12-31 16:14:33 +000037``case`` statements found in other languages.
Georg Brandl116aa622007-08-15 14:28:22 +000038
Daniel F Moisseta22bca62021-03-01 04:08:38 +000039If you're comparing the same value to several constants, or checking for specific types or
40attributes, you may also find the :keyword:`!match` statement useful. For more
41details see :ref:`tut-match`.
Georg Brandl116aa622007-08-15 14:28:22 +000042
43.. _tut-for:
44
Serhiy Storchaka2b57c432018-12-19 08:09:46 +020045:keyword:`!for` Statements
46==========================
Georg Brandl116aa622007-08-15 14:28:22 +000047
48.. index::
49 statement: for
Georg Brandl116aa622007-08-15 14:28:22 +000050
51The :keyword:`for` statement in Python differs a bit from what you may be used
52to in C or Pascal. Rather than always iterating over an arithmetic progression
53of numbers (like in Pascal), or giving the user the ability to define both the
Serhiy Storchaka2b57c432018-12-19 08:09:46 +020054iteration step and halting condition (as C), Python's :keyword:`!for` statement
Georg Brandl116aa622007-08-15 14:28:22 +000055iterates over the items of any sequence (a list or a string), in the order that
56they appear in the sequence. For example (no pun intended):
57
Christian Heimes5b5e81c2007-12-31 16:14:33 +000058.. One suggestion was to give a real C example here, but that may only serve to
59 confuse non-C programmers.
Georg Brandl116aa622007-08-15 14:28:22 +000060
61::
62
63 >>> # Measure some strings:
Chris Jerdonek4fab8f02012-10-15 19:44:47 -070064 ... words = ['cat', 'window', 'defenestrate']
65 >>> for w in words:
66 ... print(w, len(w))
Georg Brandl48310cd2009-01-03 21:18:54 +000067 ...
Georg Brandl116aa622007-08-15 14:28:22 +000068 cat 3
69 window 6
70 defenestrate 12
71
Raymond Hettinger6fcb6cf2019-08-22 23:44:19 -070072Code that modifies a collection while iterating over that same collection can
73be tricky to get right. Instead, it is usually more straight-forward to loop
74over a copy of the collection or to create a new collection::
Georg Brandl116aa622007-08-15 14:28:22 +000075
Antoine6fad3e62020-05-23 02:29:34 +020076 # Create a sample collection
77 users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}
78
Raymond Hettinger6fcb6cf2019-08-22 23:44:19 -070079 # Strategy: Iterate over a copy
80 for user, status in users.copy().items():
81 if status == 'inactive':
82 del users[user]
Georg Brandl116aa622007-08-15 14:28:22 +000083
Raymond Hettinger6fcb6cf2019-08-22 23:44:19 -070084 # Strategy: Create a new collection
85 active_users = {}
86 for user, status in users.items():
87 if status == 'active':
88 active_users[user] = status
Georg Brandl40383c82016-02-15 17:50:33 +010089
Georg Brandl116aa622007-08-15 14:28:22 +000090
91.. _tut-range:
92
93The :func:`range` Function
94==========================
95
96If you do need to iterate over a sequence of numbers, the built-in function
Guido van Rossum0616b792007-08-31 03:25:11 +000097:func:`range` comes in handy. It generates arithmetic progressions::
Georg Brandl116aa622007-08-15 14:28:22 +000098
Guido van Rossum0616b792007-08-31 03:25:11 +000099 >>> for i in range(5):
100 ... print(i)
101 ...
102 0
103 1
104 2
105 3
106 4
Georg Brandl48310cd2009-01-03 21:18:54 +0000107
Georg Brandl7d821062010-06-27 10:59:19 +0000108The given end point is never part of the generated sequence; ``range(10)`` generates
Guido van Rossum0616b792007-08-31 03:25:11 +000010910 values, the legal indices for items of a sequence of length 10. It
Georg Brandl116aa622007-08-15 14:28:22 +0000110is possible to let the range start at another number, or to specify a different
111increment (even negative; sometimes this is called the 'step')::
112
Miss Islington (bot)aeb63392021-06-27 12:51:16 -0700113 >>> list(range(5, 10))
114 [5, 6, 7, 8, 9]
Guido van Rossum0616b792007-08-31 03:25:11 +0000115
Miss Islington (bot)aeb63392021-06-27 12:51:16 -0700116 >>> list(range(0, 10, 3))
117 [0, 3, 6, 9]
Guido van Rossum0616b792007-08-31 03:25:11 +0000118
Miss Islington (bot)aeb63392021-06-27 12:51:16 -0700119 >>> list(range(-10, -100, -30))
120 [-10, -40, -70]
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Georg Brandlaf265f42008-12-07 15:06:20 +0000122To iterate over the indices of a sequence, you can combine :func:`range` and
123:func:`len` as follows::
Georg Brandl116aa622007-08-15 14:28:22 +0000124
125 >>> a = ['Mary', 'had', 'a', 'little', 'lamb']
126 >>> for i in range(len(a)):
Guido van Rossum0616b792007-08-31 03:25:11 +0000127 ... print(i, a[i])
Georg Brandl48310cd2009-01-03 21:18:54 +0000128 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000129 0 Mary
130 1 had
131 2 a
132 3 little
133 4 lamb
134
Georg Brandlaf265f42008-12-07 15:06:20 +0000135In most such cases, however, it is convenient to use the :func:`enumerate`
136function, see :ref:`tut-loopidioms`.
137
Guido van Rossum0616b792007-08-31 03:25:11 +0000138A strange thing happens if you just print a range::
139
Miss Islington (bot)aeb63392021-06-27 12:51:16 -0700140 >>> range(10)
Guido van Rossum0616b792007-08-31 03:25:11 +0000141 range(0, 10)
142
143In many ways the object returned by :func:`range` behaves as if it is a list,
Georg Brandl48310cd2009-01-03 21:18:54 +0000144but in fact it isn't. It is an object which returns the successive items of
145the desired sequence when you iterate over it, but it doesn't really make
146the list, thus saving space.
Guido van Rossum0616b792007-08-31 03:25:11 +0000147
Marco Buttu218e47b2019-06-01 23:11:48 +0200148We say such an object is :term:`iterable`, that is, suitable as a target for
Georg Brandl48310cd2009-01-03 21:18:54 +0000149functions and constructs that expect something from which they can
Marco Buttu218e47b2019-06-01 23:11:48 +0200150obtain successive items until the supply is exhausted. We have seen that
Don Kirkby3ed4d252020-02-09 16:57:46 -0800151the :keyword:`for` statement is such a construct, while an example of a function
Marco Buttu218e47b2019-06-01 23:11:48 +0200152that takes an iterable is :func:`sum`::
Guido van Rossum0616b792007-08-31 03:25:11 +0000153
Marco Buttu218e47b2019-06-01 23:11:48 +0200154 >>> sum(range(4)) # 0 + 1 + 2 + 3
155 6
Guido van Rossum0616b792007-08-31 03:25:11 +0000156
Marco Buttu218e47b2019-06-01 23:11:48 +0200157Later we will see more functions that return iterables and take iterables as
Miss Islington (bot)aeb63392021-06-27 12:51:16 -0700158arguments. In chapter :ref:`tut-structures`, we will discuss in more detail about
Marco Buttu218e47b2019-06-01 23:11:48 +0200159:func:`list`.
Georg Brandlaf265f42008-12-07 15:06:20 +0000160
Georg Brandl116aa622007-08-15 14:28:22 +0000161.. _tut-break:
162
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200163:keyword:`!break` and :keyword:`!continue` Statements, and :keyword:`!else` Clauses on Loops
164============================================================================================
Georg Brandl116aa622007-08-15 14:28:22 +0000165
regexaurus36fc8962017-06-27 18:40:41 -0400166The :keyword:`break` statement, like in C, breaks out of the innermost enclosing
Georg Brandl116aa622007-08-15 14:28:22 +0000167:keyword:`for` or :keyword:`while` loop.
168
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200169Loop statements may have an :keyword:`!else` clause; it is executed when the loop
Marco Buttu218e47b2019-06-01 23:11:48 +0200170terminates through exhaustion of the iterable (with :keyword:`for`) or when the
Georg Brandl116aa622007-08-15 14:28:22 +0000171condition 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:
Georg Brandlb03c1d92008-05-01 18:06:50 +0000178 ... print(n, 'equals', x, '*', n//x)
Georg Brandl116aa622007-08-15 14:28:22 +0000179 ... break
180 ... else:
181 ... # loop fell through without finding a factor
Guido van Rossum0616b792007-08-31 03:25:11 +0000182 ... print(n, 'is a prime number')
Georg Brandl48310cd2009-01-03 21:18:54 +0000183 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000184 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
Georg Brandlbdbdfb12011-08-08 21:45:13 +0200193(Yes, this is the correct code. Look closely: the ``else`` clause belongs to
194the :keyword:`for` loop, **not** the :keyword:`if` statement.)
195
Nick Coghlana3a164a2012-06-07 22:41:34 +1000196When used with a loop, the ``else`` clause has more in common with the
Marco Buttu218e47b2019-06-01 23:11:48 +0200197``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
Nick Coghlana3a164a2012-06-07 22:41:34 +1000199when no exception occurs, and a loop's ``else`` clause runs when no ``break``
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200200occurs. For more on the :keyword:`!try` statement and exceptions, see
Nick Coghlana3a164a2012-06-07 22:41:34 +1000201:ref:`tut-handling`.
202
Senthil Kumaran1ef9caa2012-08-12 12:01:47 -0700203The :keyword:`continue` statement, also borrowed from C, continues with the next
204iteration of the loop::
205
206 >>> for num in range(2, 10):
Eli Bendersky31a11902012-08-18 09:50:09 +0300207 ... if num % 2 == 0:
Senthil Kumaran1ef9caa2012-08-12 12:01:47 -0700208 ... print("Found an even number", num)
209 ... continue
Neeraj Samtani7bcc6452020-09-15 17:39:29 +0400210 ... print("Found an odd number", num)
Miss Islington (bot)48cb11b2021-05-12 03:25:54 -0700211 ...
Senthil Kumaran1ef9caa2012-08-12 12:01:47 -0700212 Found an even number 2
Neeraj Samtani7bcc6452020-09-15 17:39:29 +0400213 Found an odd number 3
Senthil Kumaran1ef9caa2012-08-12 12:01:47 -0700214 Found an even number 4
Neeraj Samtani7bcc6452020-09-15 17:39:29 +0400215 Found an odd number 5
Senthil Kumaran1ef9caa2012-08-12 12:01:47 -0700216 Found an even number 6
Neeraj Samtani7bcc6452020-09-15 17:39:29 +0400217 Found an odd number 7
Senthil Kumaran1ef9caa2012-08-12 12:01:47 -0700218 Found an even number 8
Neeraj Samtani7bcc6452020-09-15 17:39:29 +0400219 Found an odd number 9
Georg Brandl116aa622007-08-15 14:28:22 +0000220
221.. _tut-pass:
222
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200223:keyword:`!pass` Statements
224===========================
Georg Brandl116aa622007-08-15 14:28:22 +0000225
226The :keyword:`pass` statement does nothing. It can be used when a statement is
227required syntactically but the program requires no action. For example::
228
229 >>> while True:
Georg Brandl5d955ed2008-09-13 17:18:21 +0000230 ... pass # Busy-wait for keyboard interrupt (Ctrl+C)
Georg Brandl48310cd2009-01-03 21:18:54 +0000231 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000232
Benjamin Peterson92035012008-12-27 16:00:54 +0000233This is commonly used for creating minimal classes::
Georg Brandla971c652008-11-07 09:39:56 +0000234
Benjamin Peterson92035012008-12-27 16:00:54 +0000235 >>> class MyEmptyClass:
Georg Brandla971c652008-11-07 09:39:56 +0000236 ... pass
Benjamin Peterson92035012008-12-27 16:00:54 +0000237 ...
Georg Brandla971c652008-11-07 09:39:56 +0000238
239Another place :keyword:`pass` can be used is as a place-holder for a function or
Benjamin Peterson92035012008-12-27 16:00:54 +0000240conditional body when you are working on new code, allowing you to keep thinking
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200241at a more abstract level. The :keyword:`!pass` is silently ignored::
Georg Brandla971c652008-11-07 09:39:56 +0000242
243 >>> def initlog(*args):
Benjamin Peterson92035012008-12-27 16:00:54 +0000244 ... pass # Remember to implement this!
Georg Brandl48310cd2009-01-03 21:18:54 +0000245 ...
Georg Brandla971c652008-11-07 09:39:56 +0000246
Daniel F Moisseta22bca62021-03-01 04:08:38 +0000247
248.. _tut-match:
249
250:keyword:`!match` Statements
251============================
252
253A match statement takes an expression and compares its value to successive
254patterns given as one or more case blocks. This is superficially
255similar to a switch statement in C, Java or JavaScript (and many
256other languages), but it can also extract components (sequence elements or
257object attributes) from the value into variables.
258
259The simplest form compares a subject value against one or more literals::
260
261 def http_error(status):
262 match status:
263 case 400:
264 return "Bad request"
265 case 404:
266 return "Not found"
267 case 418:
268 return "I'm a teapot"
269 case _:
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -0700270 return "Something's wrong with the internet"
Daniel F Moisseta22bca62021-03-01 04:08:38 +0000271
272Note the last block: the "variable name" ``_`` acts as a *wildcard* and
273never fails to match. If no case matches, none of the branches is executed.
274
275You can combine several literals in a single pattern using ``|`` ("or")::
276
277 case 401 | 403 | 404:
278 return "Not allowed"
279
280Patterns can look like unpacking assignments, and can be used to bind
281variables::
282
283 # point is an (x, y) tuple
284 match point:
285 case (0, 0):
286 print("Origin")
287 case (0, y):
288 print(f"Y={y}")
289 case (x, 0):
290 print(f"X={x}")
291 case (x, y):
292 print(f"X={x}, Y={y}")
293 case _:
294 raise ValueError("Not a point")
295
296Study that one carefully! The first pattern has two literals, and can
297be thought of as an extension of the literal pattern shown above. But
298the next two patterns combine a literal and a variable, and the
299variable *binds* a value from the subject (``point``). The fourth
300pattern captures two values, which makes it conceptually similar to
301the unpacking assignment ``(x, y) = point``.
302
303If you are using classes to structure your data
304you can use the class name followed by an argument list resembling a
305constructor, but with the ability to capture attributes into variables::
306
307 class Point:
308 x: int
309 y: int
310
311 def where_is(point):
312 match point:
313 case Point(x=0, y=0):
314 print("Origin")
315 case Point(x=0, y=y):
316 print(f"Y={y}")
317 case Point(x=x, y=0):
318 print(f"X={x}")
319 case Point():
320 print("Somewhere else")
321 case _:
322 print("Not a point")
323
324You can use positional parameters with some builtin classes that provide an
325ordering for their attributes (e.g. dataclasses). You can also define a specific
326position for attributes in patterns by setting the ``__match_args__`` special
327attribute in your classes. If it's set to ("x", "y"), the following patterns are all
328equivalent (and all bind the ``y`` attribute to the ``var`` variable)::
329
330 Point(1, var)
331 Point(1, y=var)
332 Point(x=1, y=var)
333 Point(y=var, x=1)
334
335A recommended way to read patterns is to look at them as an extended form of what you
336would put on the left of an assignment, to understand which variables would be set to
337what.
338Only the standalone names (like ``var`` above) are assigned to by a match statement.
339Dotted names (like ``foo.bar``), attribute names (the ``x=`` and ``y=`` above) or class names
340(recognized by the "(...)" next to them like ``Point`` above) are never assigned to.
341
342Patterns can be arbitrarily nested. For example, if we have a short
343list of points, we could match it like this::
344
345 match points:
346 case []:
347 print("No points")
348 case [Point(0, 0)]:
349 print("The origin")
350 case [Point(x, y)]:
351 print(f"Single point {x}, {y}")
352 case [Point(0, y1), Point(0, y2)]:
353 print(f"Two on the Y axis at {y1}, {y2}")
354 case _:
355 print("Something else")
356
357We can add an ``if`` clause to a pattern, known as a "guard". If the
358guard is false, ``match`` goes on to try the next case block. Note
359that value capture happens before the guard is evaluated::
360
361 match point:
362 case Point(x, y) if x == y:
363 print(f"Y=X at {x}")
364 case Point(x, y):
365 print(f"Not on the diagonal")
366
367Several other key features of this statement:
368
369- Like unpacking assignments, tuple and list patterns have exactly the
370 same meaning and actually match arbitrary sequences. An important
371 exception is that they don't match iterators or strings.
372
373- Sequence patterns support extended unpacking: ``[x, y, *rest]`` and ``(x, y,
374 *rest)`` work similar to unpacking assignments. The
375 name after ``*`` may also be ``_``, so ``(x, y, *_)`` matches a sequence
376 of at least two items without binding the remaining items.
377
378- Mapping patterns: ``{"bandwidth": b, "latency": l}`` captures the
379 ``"bandwidth"`` and ``"latency"`` values from a dictionary. Unlike sequence
380 patterns, extra keys are ignored. An unpacking like ``**rest`` is also
Miss Islington (bot)2c479222021-11-08 09:13:02 -0800381 supported. (But ``**_`` would be redundant, so it is not allowed.)
Daniel F Moisseta22bca62021-03-01 04:08:38 +0000382
383- Subpatterns may be captured using the ``as`` keyword::
384
385 case (Point(x1, y1), Point(x2, y2) as p2): ...
386
387 will capture the second element of the input as ``p2`` (as long as the input is
388 a sequence of two points)
389
390- Most literals are compared by equality, however the singletons ``True``,
391 ``False`` and ``None`` are compared by identity.
392
393- Patterns may use named constants. These must be dotted names
394 to prevent them from being interpreted as capture variable::
395
396 from enum import Enum
397 class Color(Enum):
398 RED = 0
399 GREEN = 1
400 BLUE = 2
401
402 match color:
403 case Color.RED:
404 print("I see red!")
405 case Color.GREEN:
406 print("Grass is green")
407 case Color.BLUE:
408 print("I'm feeling the blues :(")
409
410For a more detailed explanation and additional examples, you can look into
411:pep:`636` which is written in a tutorial format.
412
Georg Brandl116aa622007-08-15 14:28:22 +0000413.. _tut-functions:
414
415Defining Functions
416==================
417
418We can create a function that writes the Fibonacci series to an arbitrary
419boundary::
420
421 >>> def fib(n): # write Fibonacci series up to n
422 ... """Print a Fibonacci series up to n."""
423 ... a, b = 0, 1
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000424 ... while a < n:
425 ... print(a, end=' ')
Georg Brandl116aa622007-08-15 14:28:22 +0000426 ... a, b = b, a+b
Guido van Rossum0616b792007-08-31 03:25:11 +0000427 ... print()
Georg Brandl48310cd2009-01-03 21:18:54 +0000428 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000429 >>> # Now call the function we just defined:
430 ... fib(2000)
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000431 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
Georg Brandl116aa622007-08-15 14:28:22 +0000432
433.. index::
434 single: documentation strings
435 single: docstrings
436 single: strings, documentation
437
438The keyword :keyword:`def` introduces a function *definition*. It must be
439followed by the function name and the parenthesized list of formal parameters.
440The statements that form the body of the function start at the next line, and
Georg Brandl5d955ed2008-09-13 17:18:21 +0000441must be indented.
Georg Brandl116aa622007-08-15 14:28:22 +0000442
Georg Brandl5d955ed2008-09-13 17:18:21 +0000443The first statement of the function body can optionally be a string literal;
444this string literal is the function's documentation string, or :dfn:`docstring`.
445(More about docstrings can be found in the section :ref:`tut-docstrings`.)
Georg Brandl116aa622007-08-15 14:28:22 +0000446There are tools which use docstrings to automatically produce online or printed
447documentation, or to let the user interactively browse through code; it's good
Georg Brandl5d955ed2008-09-13 17:18:21 +0000448practice to include docstrings in code that you write, so make a habit of it.
Georg Brandl116aa622007-08-15 14:28:22 +0000449
450The *execution* of a function introduces a new symbol table used for the local
451variables of the function. More precisely, all variable assignments in a
452function store the value in the local symbol table; whereas variable references
Georg Brandl86def6c2008-01-21 20:36:10 +0000453first look in the local symbol table, then in the local symbol tables of
454enclosing functions, then in the global symbol table, and finally in the table
pbhde1f95e72019-05-29 05:38:03 +0200455of built-in names. Thus, global variables and variables of enclosing functions
456cannot be directly assigned a value within a function (unless, for global
457variables, named in a :keyword:`global` statement, or, for variables of enclosing
458functions, named in a :keyword:`nonlocal` statement), although they may be
459referenced.
Georg Brandl116aa622007-08-15 14:28:22 +0000460
461The actual parameters (arguments) to a function call are introduced in the local
462symbol table of the called function when it is called; thus, arguments are
463passed using *call by value* (where the *value* is always an object *reference*,
Terry Jan Reedyb30fcba2021-02-19 19:26:21 -0500464not the value of the object). [#]_ When a function calls another function,
465or calls itself recursively, a new
Georg Brandl116aa622007-08-15 14:28:22 +0000466local symbol table is created for that call.
467
Joannah Nanjekyed12af712020-07-05 22:47:15 -0300468A function definition associates the function name with the function object in
469the current symbol table. The interpreter recognizes the object pointed to by
470that name as a user-defined function. Other names can also point to that same
471function object and can also be used to access the function::
Georg Brandl116aa622007-08-15 14:28:22 +0000472
473 >>> fib
474 <function fib at 10042ed0>
475 >>> f = fib
476 >>> f(100)
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000477 0 1 1 2 3 5 8 13 21 34 55 89
Georg Brandl116aa622007-08-15 14:28:22 +0000478
Georg Brandl5d955ed2008-09-13 17:18:21 +0000479Coming from other languages, you might object that ``fib`` is not a function but
480a procedure since it doesn't return a value. In fact, even functions without a
481:keyword:`return` statement do return a value, albeit a rather boring one. This
482value is called ``None`` (it's a built-in name). Writing the value ``None`` is
483normally suppressed by the interpreter if it would be the only value written.
484You can see it if you really want to using :func:`print`::
Georg Brandl116aa622007-08-15 14:28:22 +0000485
Georg Brandl9afde1c2007-11-01 20:32:30 +0000486 >>> fib(0)
Guido van Rossum0616b792007-08-31 03:25:11 +0000487 >>> print(fib(0))
Georg Brandl116aa622007-08-15 14:28:22 +0000488 None
489
490It is simple to write a function that returns a list of the numbers of the
491Fibonacci series, instead of printing it::
492
Serhiy Storchakadba90392016-05-10 12:01:23 +0300493 >>> def fib2(n): # return Fibonacci series up to n
Georg Brandl116aa622007-08-15 14:28:22 +0000494 ... """Return a list containing the Fibonacci series up to n."""
495 ... result = []
496 ... a, b = 0, 1
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000497 ... while a < n:
498 ... result.append(a) # see below
Georg Brandl116aa622007-08-15 14:28:22 +0000499 ... a, b = b, a+b
500 ... return result
Georg Brandl48310cd2009-01-03 21:18:54 +0000501 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000502 >>> f100 = fib2(100) # call it
503 >>> f100 # write the result
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000504 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
Georg Brandl116aa622007-08-15 14:28:22 +0000505
506This example, as usual, demonstrates some new Python features:
507
508* The :keyword:`return` statement returns with a value from a function.
Serhiy Storchaka2b57c432018-12-19 08:09:46 +0200509 :keyword:`!return` without an expression argument returns ``None``. Falling off
Georg Brandl5d955ed2008-09-13 17:18:21 +0000510 the end of a function also returns ``None``.
Georg Brandl116aa622007-08-15 14:28:22 +0000511
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000512* The statement ``result.append(a)`` calls a *method* of the list object
Georg Brandl116aa622007-08-15 14:28:22 +0000513 ``result``. A method is a function that 'belongs' to an object and is named
514 ``obj.methodname``, where ``obj`` is some object (this may be an expression),
515 and ``methodname`` is the name of a method that is defined by the object's type.
516 Different types define different methods. Methods of different types may have
517 the same name without causing ambiguity. (It is possible to define your own
Georg Brandlc6c31782009-06-08 13:41:29 +0000518 object types and methods, using *classes*, see :ref:`tut-classes`)
Georg Brandl116aa622007-08-15 14:28:22 +0000519 The method :meth:`append` shown in the example is defined for list objects; it
520 adds a new element at the end of the list. In this example it is equivalent to
Mark Dickinsonc099ee22009-11-23 16:41:41 +0000521 ``result = result + [a]``, but more efficient.
Georg Brandl116aa622007-08-15 14:28:22 +0000522
523
524.. _tut-defining:
525
526More on Defining Functions
527==========================
528
529It is also possible to define functions with a variable number of arguments.
530There are three forms, which can be combined.
531
532
533.. _tut-defaultargs:
534
535Default Argument Values
536-----------------------
537
538The most useful form is to specify a default value for one or more arguments.
539This creates a function that can be called with fewer arguments than it is
540defined to allow. For example::
541
Berker Peksag0a5120e2016-06-02 11:31:19 -0700542 def ask_ok(prompt, retries=4, reminder='Please try again!'):
Georg Brandl116aa622007-08-15 14:28:22 +0000543 while True:
Georg Brandle9af2842007-08-17 05:54:09 +0000544 ok = input(prompt)
Georg Brandlc6c31782009-06-08 13:41:29 +0000545 if ok in ('y', 'ye', 'yes'):
546 return True
547 if ok in ('n', 'no', 'nop', 'nope'):
548 return False
Georg Brandl116aa622007-08-15 14:28:22 +0000549 retries = retries - 1
Collin Winter58721bc2007-09-10 00:39:52 +0000550 if retries < 0:
Berker Peksag0a5120e2016-06-02 11:31:19 -0700551 raise ValueError('invalid user response')
552 print(reminder)
Georg Brandl116aa622007-08-15 14:28:22 +0000553
Georg Brandlc6c31782009-06-08 13:41:29 +0000554This function can be called in several ways:
555
556* giving only the mandatory argument:
557 ``ask_ok('Do you really want to quit?')``
558* giving one of the optional arguments:
559 ``ask_ok('OK to overwrite the file?', 2)``
560* or even giving all arguments:
561 ``ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')``
Georg Brandl116aa622007-08-15 14:28:22 +0000562
563This example also introduces the :keyword:`in` keyword. This tests whether or
564not a sequence contains a certain value.
565
566The default values are evaluated at the point of function definition in the
567*defining* scope, so that ::
568
569 i = 5
570
571 def f(arg=i):
Guido van Rossum0616b792007-08-31 03:25:11 +0000572 print(arg)
Georg Brandl116aa622007-08-15 14:28:22 +0000573
574 i = 6
575 f()
576
577will print ``5``.
578
579**Important warning:** The default value is evaluated only once. This makes a
580difference when the default is a mutable object such as a list, dictionary, or
581instances of most classes. For example, the following function accumulates the
582arguments passed to it on subsequent calls::
583
584 def f(a, L=[]):
585 L.append(a)
586 return L
587
Guido van Rossum0616b792007-08-31 03:25:11 +0000588 print(f(1))
589 print(f(2))
590 print(f(3))
Georg Brandl116aa622007-08-15 14:28:22 +0000591
592This will print ::
593
594 [1]
595 [1, 2]
596 [1, 2, 3]
597
598If you don't want the default to be shared between subsequent calls, you can
599write the function like this instead::
600
601 def f(a, L=None):
602 if L is None:
603 L = []
604 L.append(a)
605 return L
606
607
608.. _tut-keywordargs:
609
610Keyword Arguments
611-----------------
612
Ezio Melotti7b7e39a2011-12-13 15:49:22 +0200613Functions can also be called using :term:`keyword arguments <keyword argument>`
614of the form ``kwarg=value``. For instance, the following function::
Georg Brandl116aa622007-08-15 14:28:22 +0000615
616 def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
Georg Brandle4ac7502007-09-03 07:10:24 +0000617 print("-- This parrot wouldn't", action, end=' ')
Guido van Rossum0616b792007-08-31 03:25:11 +0000618 print("if you put", voltage, "volts through it.")
619 print("-- Lovely plumage, the", type)
620 print("-- It's", state, "!")
Georg Brandl116aa622007-08-15 14:28:22 +0000621
Ezio Melotti7b7e39a2011-12-13 15:49:22 +0200622accepts one required argument (``voltage``) and three optional arguments
623(``state``, ``action``, and ``type``). This function can be called in any
624of the following ways::
Georg Brandl116aa622007-08-15 14:28:22 +0000625
Ezio Melotti7b7e39a2011-12-13 15:49:22 +0200626 parrot(1000) # 1 positional argument
627 parrot(voltage=1000) # 1 keyword argument
628 parrot(voltage=1000000, action='VOOOOOM') # 2 keyword arguments
629 parrot(action='VOOOOOM', voltage=1000000) # 2 keyword arguments
630 parrot('a million', 'bereft of life', 'jump') # 3 positional arguments
631 parrot('a thousand', state='pushing up the daisies') # 1 positional, 1 keyword
Georg Brandl116aa622007-08-15 14:28:22 +0000632
Ezio Melotti7b7e39a2011-12-13 15:49:22 +0200633but all the following calls would be invalid::
Georg Brandl116aa622007-08-15 14:28:22 +0000634
635 parrot() # required argument missing
Ezio Melotti7b7e39a2011-12-13 15:49:22 +0200636 parrot(voltage=5.0, 'dead') # non-keyword argument after a keyword argument
637 parrot(110, voltage=220) # duplicate value for the same argument
638 parrot(actor='John Cleese') # unknown keyword argument
Georg Brandl116aa622007-08-15 14:28:22 +0000639
Ezio Melotti7b7e39a2011-12-13 15:49:22 +0200640In a function call, keyword arguments must follow positional arguments.
641All the keyword arguments passed must match one of the arguments
642accepted by the function (e.g. ``actor`` is not a valid argument for the
643``parrot`` function), and their order is not important. This also includes
644non-optional arguments (e.g. ``parrot(voltage=1000)`` is valid too).
645No argument may receive a value more than once.
646Here's an example that fails due to this restriction::
Georg Brandl116aa622007-08-15 14:28:22 +0000647
648 >>> def function(a):
649 ... pass
Georg Brandl48310cd2009-01-03 21:18:54 +0000650 ...
Georg Brandl116aa622007-08-15 14:28:22 +0000651 >>> function(0, a=0)
652 Traceback (most recent call last):
UltimateCoder88569402017-05-03 22:16:45 +0530653 File "<stdin>", line 1, in <module>
Miss Islington (bot)25122b22021-08-13 17:25:11 -0700654 TypeError: function() got multiple values for argument 'a'
Georg Brandl116aa622007-08-15 14:28:22 +0000655
656When a final formal parameter of the form ``**name`` is present, it receives a
657dictionary (see :ref:`typesmapping`) containing all keyword arguments except for
658those corresponding to a formal parameter. This may be combined with a formal
659parameter of the form ``*name`` (described in the next subsection) which
Julien Palard51ddab82019-05-28 15:10:23 +0200660receives a :ref:`tuple <tut-tuples>` containing the positional
661arguments beyond the formal parameter list. (``*name`` must occur
662before ``**name``.) For example, if we define a function like this::
Georg Brandl116aa622007-08-15 14:28:22 +0000663
664 def cheeseshop(kind, *arguments, **keywords):
Georg Brandl5d955ed2008-09-13 17:18:21 +0000665 print("-- Do you have any", kind, "?")
Guido van Rossum0616b792007-08-31 03:25:11 +0000666 print("-- I'm sorry, we're all out of", kind)
Georg Brandl70543ac2010-10-15 15:32:05 +0000667 for arg in arguments:
668 print(arg)
Georg Brandl5d955ed2008-09-13 17:18:21 +0000669 print("-" * 40)
Jim Fasarakis-Hilliard32e8f9b2017-02-21 08:20:23 +0200670 for kw in keywords:
Georg Brandl70543ac2010-10-15 15:32:05 +0000671 print(kw, ":", keywords[kw])
Georg Brandl116aa622007-08-15 14:28:22 +0000672
673It could be called like this::
674
Georg Brandl5d955ed2008-09-13 17:18:21 +0000675 cheeseshop("Limburger", "It's very runny, sir.",
Georg Brandl116aa622007-08-15 14:28:22 +0000676 "It's really very, VERY runny, sir.",
Georg Brandl5d955ed2008-09-13 17:18:21 +0000677 shopkeeper="Michael Palin",
678 client="John Cleese",
679 sketch="Cheese Shop Sketch")
Georg Brandl116aa622007-08-15 14:28:22 +0000680
Martin Panter1050d2d2016-07-26 11:18:21 +0200681and of course it would print:
682
683.. code-block:: none
Georg Brandl116aa622007-08-15 14:28:22 +0000684
685 -- Do you have any Limburger ?
686 -- I'm sorry, we're all out of Limburger
687 It's very runny, sir.
688 It's really very, VERY runny, sir.
689 ----------------------------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000690 shopkeeper : Michael Palin
Jim Fasarakis-Hilliard32e8f9b2017-02-21 08:20:23 +0200691 client : John Cleese
Georg Brandl116aa622007-08-15 14:28:22 +0000692 sketch : Cheese Shop Sketch
693
Jim Fasarakis-Hilliard32e8f9b2017-02-21 08:20:23 +0200694Note that the order in which the keyword arguments are printed is guaranteed
695to match the order in which they were provided in the function call.
696
Pablo Galindob76302d2019-05-29 00:45:32 +0100697Special parameters
698------------------
699
700By default, arguments may be passed to a Python function either by position
701or explicitly by keyword. For readability and performance, it makes sense to
702restrict the way arguments can be passed so that a developer need only look
703at the function definition to determine if items are passed by position, by
704position or keyword, or by keyword.
705
706A function definition may look like:
707
708.. code-block:: none
709
710 def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
711 ----------- ---------- ----------
712 | | |
713 | Positional or keyword |
714 | - Keyword only
715 -- Positional only
716
717where ``/`` and ``*`` are optional. If used, these symbols indicate the kind of
718parameter by how the arguments may be passed to the function:
719positional-only, positional-or-keyword, and keyword-only. Keyword parameters
720are also referred to as named parameters.
721
722-------------------------------
723Positional-or-Keyword Arguments
724-------------------------------
725
726If ``/`` and ``*`` are not present in the function definition, arguments may
727be passed to a function by position or by keyword.
728
729--------------------------
730Positional-Only Parameters
731--------------------------
732
733Looking at this in a bit more detail, it is possible to mark certain parameters
734as *positional-only*. If *positional-only*, the parameters' order matters, and
735the parameters cannot be passed by keyword. Positional-only parameters are
736placed before a ``/`` (forward-slash). The ``/`` is used to logically
737separate the positional-only parameters from the rest of the parameters.
738If there is no ``/`` in the function definition, there are no positional-only
739parameters.
740
741Parameters following the ``/`` may be *positional-or-keyword* or *keyword-only*.
742
743----------------------
744Keyword-Only Arguments
745----------------------
746
747To mark parameters as *keyword-only*, indicating the parameters must be passed
748by keyword argument, place an ``*`` in the arguments list just before the first
749*keyword-only* parameter.
750
751-----------------
752Function Examples
753-----------------
754
755Consider the following example function definitions paying close attention to the
756markers ``/`` and ``*``::
757
758 >>> def standard_arg(arg):
759 ... print(arg)
760 ...
761 >>> def pos_only_arg(arg, /):
762 ... print(arg)
763 ...
764 >>> def kwd_only_arg(*, arg):
765 ... print(arg)
766 ...
767 >>> def combined_example(pos_only, /, standard, *, kwd_only):
768 ... print(pos_only, standard, kwd_only)
769
770
771The first function definition, ``standard_arg``, the most familiar form,
772places no restrictions on the calling convention and arguments may be
773passed by position or keyword::
774
775 >>> standard_arg(2)
776 2
777
778 >>> standard_arg(arg=2)
779 2
780
781The second function ``pos_only_arg`` is restricted to only use positional
782parameters as there is a ``/`` in the function definition::
783
784 >>> pos_only_arg(1)
785 1
786
787 >>> pos_only_arg(arg=1)
788 Traceback (most recent call last):
789 File "<stdin>", line 1, in <module>
Miss Islington (bot)25122b22021-08-13 17:25:11 -0700790 TypeError: pos_only_arg() got some positional-only arguments passed as keyword arguments: 'arg'
Pablo Galindob76302d2019-05-29 00:45:32 +0100791
792The third function ``kwd_only_args`` only allows keyword arguments as indicated
793by a ``*`` in the function definition::
794
795 >>> kwd_only_arg(3)
796 Traceback (most recent call last):
797 File "<stdin>", line 1, in <module>
798 TypeError: kwd_only_arg() takes 0 positional arguments but 1 was given
799
800 >>> kwd_only_arg(arg=3)
801 3
802
803And the last uses all three calling conventions in the same function
804definition::
805
806 >>> combined_example(1, 2, 3)
807 Traceback (most recent call last):
808 File "<stdin>", line 1, in <module>
809 TypeError: combined_example() takes 2 positional arguments but 3 were given
810
811 >>> combined_example(1, 2, kwd_only=3)
812 1 2 3
813
814 >>> combined_example(1, standard=2, kwd_only=3)
815 1 2 3
816
817 >>> combined_example(pos_only=1, standard=2, kwd_only=3)
818 Traceback (most recent call last):
819 File "<stdin>", line 1, in <module>
Miss Islington (bot)25122b22021-08-13 17:25:11 -0700820 TypeError: combined_example() got some positional-only arguments passed as keyword arguments: 'pos_only'
Pablo Galindob76302d2019-05-29 00:45:32 +0100821
822
823Finally, consider this function definition which has a potential collision between the positional argument ``name`` and ``**kwds`` which has ``name`` as a key::
824
825 def foo(name, **kwds):
826 return 'name' in kwds
827
828There is no possible call that will make it return ``True`` as the keyword ``'name'``
Denis Ovsienko0be7c212020-08-19 12:29:47 +0100829will always bind to the first parameter. For example::
Pablo Galindob76302d2019-05-29 00:45:32 +0100830
831 >>> foo(1, **{'name': 2})
832 Traceback (most recent call last):
833 File "<stdin>", line 1, in <module>
834 TypeError: foo() got multiple values for argument 'name'
835 >>>
836
837But using ``/`` (positional only arguments), it is possible since it allows ``name`` as a positional argument and ``'name'`` as a key in the keyword arguments::
838
839 def foo(name, /, **kwds):
840 return 'name' in kwds
841 >>> foo(1, **{'name': 2})
842 True
843
844In other words, the names of positional-only parameters can be used in
845``**kwds`` without ambiguity.
846
847-----
848Recap
849-----
850
851The use case will determine which parameters to use in the function definition::
852
853 def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
854
855As guidance:
856
857* Use positional-only if you want the name of the parameters to not be
858 available to the user. This is useful when parameter names have no real
859 meaning, if you want to enforce the order of the arguments when the function
860 is called or if you need to take some positional parameters and arbitrary
861 keywords.
862* Use keyword-only when names have meaning and the function definition is
863 more understandable by being explicit with names or you want to prevent
864 users relying on the position of the argument being passed.
Adorilson Bezerrab7af4e72019-09-16 04:04:58 -0300865* For an API, use positional-only to prevent breaking API changes
Pablo Galindob76302d2019-05-29 00:45:32 +0100866 if the parameter's name is modified in the future.
Georg Brandl116aa622007-08-15 14:28:22 +0000867
868.. _tut-arbitraryargs:
869
870Arbitrary Argument Lists
871------------------------
872
Christian Heimesdae2a892008-04-19 00:55:37 +0000873.. index::
Serhiy Storchaka913876d2018-10-28 13:41:26 +0200874 single: * (asterisk); in function calls
Christian Heimesdae2a892008-04-19 00:55:37 +0000875
Georg Brandl116aa622007-08-15 14:28:22 +0000876Finally, the least frequently used option is to specify that a function can be
877called with an arbitrary number of arguments. These arguments will be wrapped
Georg Brandl5d955ed2008-09-13 17:18:21 +0000878up in a tuple (see :ref:`tut-tuples`). Before the variable number of arguments,
879zero or more normal arguments may occur. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000880
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000881 def write_multiple_items(file, separator, *args):
882 file.write(separator.join(args))
Georg Brandl116aa622007-08-15 14:28:22 +0000883
Georg Brandl48310cd2009-01-03 21:18:54 +0000884
Guido van Rossum0616b792007-08-31 03:25:11 +0000885Normally, these ``variadic`` arguments will be last in the list of formal
Georg Brandl48310cd2009-01-03 21:18:54 +0000886parameters, because they scoop up all remaining input arguments that are
Guido van Rossum0616b792007-08-31 03:25:11 +0000887passed to the function. Any formal parameters which occur after the ``*args``
Georg Brandl48310cd2009-01-03 21:18:54 +0000888parameter are 'keyword-only' arguments, meaning that they can only be used as
Georg Brandle4ac7502007-09-03 07:10:24 +0000889keywords rather than positional arguments. ::
Georg Brandl48310cd2009-01-03 21:18:54 +0000890
Guido van Rossum0616b792007-08-31 03:25:11 +0000891 >>> def concat(*args, sep="/"):
Serhiy Storchakadba90392016-05-10 12:01:23 +0300892 ... return sep.join(args)
Guido van Rossum0616b792007-08-31 03:25:11 +0000893 ...
894 >>> concat("earth", "mars", "venus")
895 'earth/mars/venus'
896 >>> concat("earth", "mars", "venus", sep=".")
897 'earth.mars.venus'
Georg Brandl116aa622007-08-15 14:28:22 +0000898
899.. _tut-unpacking-arguments:
900
901Unpacking Argument Lists
902------------------------
903
904The reverse situation occurs when the arguments are already in a list or tuple
905but need to be unpacked for a function call requiring separate positional
906arguments. For instance, the built-in :func:`range` function expects separate
907*start* and *stop* arguments. If they are not available separately, write the
Raymond Hettingerfb28fcc2019-03-27 21:03:02 -0700908function call with the ``*``\ -operator to unpack the arguments out of a list
Georg Brandl116aa622007-08-15 14:28:22 +0000909or tuple::
910
Guido van Rossum0616b792007-08-31 03:25:11 +0000911 >>> list(range(3, 6)) # normal call with separate arguments
Georg Brandl116aa622007-08-15 14:28:22 +0000912 [3, 4, 5]
913 >>> args = [3, 6]
Guido van Rossum0616b792007-08-31 03:25:11 +0000914 >>> list(range(*args)) # call with arguments unpacked from a list
Georg Brandl116aa622007-08-15 14:28:22 +0000915 [3, 4, 5]
916
Christian Heimesdae2a892008-04-19 00:55:37 +0000917.. index::
Serhiy Storchakaddb961d2018-10-26 09:00:49 +0300918 single: **; in function calls
Christian Heimesdae2a892008-04-19 00:55:37 +0000919
Serhiy Storchaka3f819ca2018-10-31 02:26:06 +0200920In the same fashion, dictionaries can deliver keyword arguments with the
Raymond Hettingerfb28fcc2019-03-27 21:03:02 -0700921``**``\ -operator::
Georg Brandl116aa622007-08-15 14:28:22 +0000922
923 >>> def parrot(voltage, state='a stiff', action='voom'):
Georg Brandle4ac7502007-09-03 07:10:24 +0000924 ... print("-- This parrot wouldn't", action, end=' ')
Guido van Rossum0616b792007-08-31 03:25:11 +0000925 ... print("if you put", voltage, "volts through it.", end=' ')
926 ... print("E's", state, "!")
Georg Brandl116aa622007-08-15 14:28:22 +0000927 ...
928 >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
929 >>> parrot(**d)
930 -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
931
932
933.. _tut-lambda:
934
Georg Brandlde5aff12013-10-06 10:22:45 +0200935Lambda Expressions
936------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000937
Georg Brandlde5aff12013-10-06 10:22:45 +0200938Small anonymous functions can be created with the :keyword:`lambda` keyword.
939This function returns the sum of its two arguments: ``lambda a, b: a+b``.
Georg Brandl242e6a02013-10-06 10:28:39 +0200940Lambda functions can be used wherever function objects are required. They are
Georg Brandlde5aff12013-10-06 10:22:45 +0200941syntactically restricted to a single expression. Semantically, they are just
942syntactic sugar for a normal function definition. Like nested function
943definitions, lambda functions can reference variables from the containing
944scope::
Georg Brandl116aa622007-08-15 14:28:22 +0000945
946 >>> def make_incrementor(n):
947 ... return lambda x: x + n
948 ...
949 >>> f = make_incrementor(42)
950 >>> f(0)
951 42
952 >>> f(1)
953 43
954
Georg Brandlde5aff12013-10-06 10:22:45 +0200955The above example uses a lambda expression to return a function. Another use
956is to pass a small function as an argument::
957
958 >>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
959 >>> pairs.sort(key=lambda pair: pair[1])
960 >>> pairs
961 [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
962
Georg Brandl116aa622007-08-15 14:28:22 +0000963
964.. _tut-docstrings:
965
966Documentation Strings
967---------------------
968
969.. index::
970 single: docstrings
971 single: documentation strings
972 single: strings, documentation
973
Guido van Rossum0616b792007-08-31 03:25:11 +0000974Here are some conventions about the content and formatting of documentation
Georg Brandl48310cd2009-01-03 21:18:54 +0000975strings.
Georg Brandl116aa622007-08-15 14:28:22 +0000976
977The first line should always be a short, concise summary of the object's
978purpose. For brevity, it should not explicitly state the object's name or type,
979since these are available by other means (except if the name happens to be a
980verb describing a function's operation). This line should begin with a capital
981letter and end with a period.
982
983If there are more lines in the documentation string, the second line should be
984blank, visually separating the summary from the rest of the description. The
985following lines should be one or more paragraphs describing the object's calling
986conventions, its side effects, etc.
987
988The Python parser does not strip indentation from multi-line string literals in
989Python, so tools that process documentation have to strip indentation if
990desired. This is done using the following convention. The first non-blank line
991*after* the first line of the string determines the amount of indentation for
992the entire documentation string. (We can't use the first line since it is
993generally adjacent to the string's opening quotes so its indentation is not
994apparent in the string literal.) Whitespace "equivalent" to this indentation is
995then stripped from the start of all lines of the string. Lines that are
996indented less should not occur, but if they occur all their leading whitespace
997should be stripped. Equivalence of whitespace should be tested after expansion
998of tabs (to 8 spaces, normally).
999
1000Here is an example of a multi-line docstring::
1001
1002 >>> def my_function():
1003 ... """Do nothing, but document it.
Georg Brandl48310cd2009-01-03 21:18:54 +00001004 ...
Georg Brandl116aa622007-08-15 14:28:22 +00001005 ... No, really, it doesn't do anything.
1006 ... """
1007 ... pass
Georg Brandl48310cd2009-01-03 21:18:54 +00001008 ...
Guido van Rossum0616b792007-08-31 03:25:11 +00001009 >>> print(my_function.__doc__)
Georg Brandl116aa622007-08-15 14:28:22 +00001010 Do nothing, but document it.
1011
1012 No, really, it doesn't do anything.
1013
1014
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001015.. _tut-annotations:
1016
1017Function Annotations
1018--------------------
1019
1020.. sectionauthor:: Zachary Ware <zachary.ware@gmail.com>
1021.. index::
1022 pair: function; annotations
Serhiy Storchakaddb961d2018-10-26 09:00:49 +03001023 single: ->; function annotations
Serhiy Storchaka913876d2018-10-28 13:41:26 +02001024 single: : (colon); function annotations
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001025
Zachary Waref3b990e2015-04-13 11:30:47 -05001026:ref:`Function annotations <function>` are completely optional metadata
Neeraj Badlani643ff712018-04-25 10:52:13 -07001027information about the types used by user-defined functions (see :pep:`3107` and
1028:pep:`484` for more information).
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001029
Cheryl Sabellab7105c92018-12-24 00:09:09 -05001030:term:`Annotations <function annotation>` are stored in the :attr:`__annotations__`
1031attribute of the function as a dictionary and have no effect on any other part of the
1032function. Parameter annotations are defined by a colon after the parameter name, followed
1033by an expression evaluating to the value of the annotation. Return annotations are
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001034defined by a literal ``->``, followed by an expression, between the parameter
1035list and the colon denoting the end of the :keyword:`def` statement. The
Irit Katriela53e9a72021-03-27 17:20:58 +00001036following example has a required argument, an optional argument, and the return
Zachary Waref3b990e2015-04-13 11:30:47 -05001037value annotated::
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001038
Zachary Waref3b990e2015-04-13 11:30:47 -05001039 >>> def f(ham: str, eggs: str = 'eggs') -> str:
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001040 ... print("Annotations:", f.__annotations__)
1041 ... print("Arguments:", ham, eggs)
Zachary Waref3b990e2015-04-13 11:30:47 -05001042 ... return ham + ' and ' + eggs
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001043 ...
Zachary Waref3b990e2015-04-13 11:30:47 -05001044 >>> f('spam')
1045 Annotations: {'ham': <class 'str'>, 'return': <class 'str'>, 'eggs': <class 'str'>}
1046 Arguments: spam eggs
1047 'spam and eggs'
Andrew Svetlov1491cbd2012-11-01 21:26:55 +02001048
Christian Heimes043d6f62008-01-07 17:19:16 +00001049.. _tut-codingstyle:
1050
1051Intermezzo: Coding Style
1052========================
1053
1054.. sectionauthor:: Georg Brandl <georg@python.org>
1055.. index:: pair: coding; style
1056
1057Now that you are about to write longer, more complex pieces of Python, it is a
1058good time to talk about *coding style*. Most languages can be written (or more
1059concise, *formatted*) in different styles; some are more readable than others.
1060Making it easy for others to read your code is always a good idea, and adopting
1061a nice coding style helps tremendously for that.
1062
Christian Heimesdae2a892008-04-19 00:55:37 +00001063For Python, :pep:`8` has emerged as the style guide that most projects adhere to;
Christian Heimes043d6f62008-01-07 17:19:16 +00001064it promotes a very readable and eye-pleasing coding style. Every Python
1065developer should read it at some point; here are the most important points
1066extracted for you:
1067
1068* Use 4-space indentation, and no tabs.
1069
1070 4 spaces are a good compromise between small indentation (allows greater
1071 nesting depth) and large indentation (easier to read). Tabs introduce
1072 confusion, and are best left out.
1073
1074* Wrap lines so that they don't exceed 79 characters.
1075
1076 This helps users with small displays and makes it possible to have several
1077 code files side-by-side on larger displays.
1078
1079* Use blank lines to separate functions and classes, and larger blocks of
1080 code inside functions.
1081
1082* When possible, put comments on a line of their own.
1083
1084* Use docstrings.
1085
1086* Use spaces around operators and after commas, but not directly inside
1087 bracketing constructs: ``a = f(1, 2) + g(3, 4)``.
1088
1089* Name your classes and functions consistently; the convention is to use
Julien Palard2da622f2019-07-08 23:06:32 +02001090 ``UpperCamelCase`` for classes and ``lowercase_with_underscores`` for functions
Georg Brandl5d955ed2008-09-13 17:18:21 +00001091 and methods. Always use ``self`` as the name for the first method argument
1092 (see :ref:`tut-firstclasses` for more on classes and methods).
Christian Heimes043d6f62008-01-07 17:19:16 +00001093
1094* Don't use fancy encodings if your code is meant to be used in international
Georg Brandl7ae90dd2009-06-08 18:59:09 +00001095 environments. Python's default, UTF-8, or even plain ASCII work best in any
1096 case.
1097
1098* Likewise, don't use non-ASCII characters in identifiers if there is only the
1099 slightest chance people speaking a different language will read or maintain
1100 the code.
Christian Heimes043d6f62008-01-07 17:19:16 +00001101
Georg Brandl116aa622007-08-15 14:28:22 +00001102
1103.. rubric:: Footnotes
1104
Christian Heimes043d6f62008-01-07 17:19:16 +00001105.. [#] Actually, *call by object reference* would be a better description,
1106 since if a mutable object is passed, the caller will see any changes the
1107 callee makes to it (items inserted into a list).