~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to python-3.5.1-docs-html/tutorial/controlflow.html

  • Committer: Dave Kuhlman
  • Date: 2017-04-15 16:24:56 UTC
  • Revision ID: dkuhlman@davekuhlman.org-20170415162456-iav9vozzg4iwqwv3
Updated docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
 
 
4
 
 
5
 
<html xmlns="http://www.w3.org/1999/xhtml">
6
 
  <head>
7
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
 
    
9
 
    <title>4. More Control Flow Tools &mdash; Python 3.5.1 documentation</title>
10
 
    
11
 
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
12
 
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
13
 
    
14
 
    <script type="text/javascript">
15
 
      var DOCUMENTATION_OPTIONS = {
16
 
        URL_ROOT:    '../',
17
 
        VERSION:     '3.5.1',
18
 
        COLLAPSE_INDEX: false,
19
 
        FILE_SUFFIX: '.html',
20
 
        HAS_SOURCE:  true
21
 
      };
22
 
    </script>
23
 
    <script type="text/javascript" src="../_static/jquery.js"></script>
24
 
    <script type="text/javascript" src="../_static/underscore.js"></script>
25
 
    <script type="text/javascript" src="../_static/doctools.js"></script>
26
 
    <script type="text/javascript" src="../_static/sidebar.js"></script>
27
 
    <link rel="search" type="application/opensearchdescription+xml"
28
 
          title="Search within Python 3.5.1 documentation"
29
 
          href="../_static/opensearch.xml"/>
30
 
    <link rel="author" title="About these documents" href="../about.html" />
31
 
    <link rel="copyright" title="Copyright" href="../copyright.html" />
32
 
    <link rel="top" title="Python 3.5.1 documentation" href="../contents.html" />
33
 
    <link rel="up" title="The Python Tutorial" href="index.html" />
34
 
    <link rel="next" title="5. Data Structures" href="datastructures.html" />
35
 
    <link rel="prev" title="3. An Informal Introduction to Python" href="introduction.html" />
36
 
    <link rel="shortcut icon" type="image/png" href="../_static/py.png" />
37
 
    <script type="text/javascript" src="../_static/copybutton.js"></script>
38
 
    <script type="text/javascript" src="../_static/version_switch.js"></script>
39
 
    
40
 
 
41
 
 
42
 
  </head>
43
 
  <body role="document">  
44
 
    <div class="related" role="navigation" aria-label="related navigation">
45
 
      <h3>Navigation</h3>
46
 
      <ul>
47
 
        <li class="right" style="margin-right: 10px">
48
 
          <a href="../genindex.html" title="General Index"
49
 
             accesskey="I">index</a></li>
50
 
        <li class="right" >
51
 
          <a href="../py-modindex.html" title="Python Module Index"
52
 
             >modules</a> |</li>
53
 
        <li class="right" >
54
 
          <a href="datastructures.html" title="5. Data Structures"
55
 
             accesskey="N">next</a> |</li>
56
 
        <li class="right" >
57
 
          <a href="introduction.html" title="3. An Informal Introduction to Python"
58
 
             accesskey="P">previous</a> |</li>
59
 
        <li><img src="../_static/py.png" alt=""
60
 
                 style="vertical-align: middle; margin-top: -1px"/></li>
61
 
        <li><a href="https://www.python.org/">Python</a> &raquo;</li>
62
 
        <li>
63
 
          <span class="version_switcher_placeholder">3.5.1</span>
64
 
          <a href="../index.html">Documentation </a> &raquo;
65
 
        </li>
66
 
 
67
 
          <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">The Python Tutorial</a> &raquo;</li> 
68
 
      </ul>
69
 
    </div>    
70
 
 
71
 
    <div class="document">
72
 
      <div class="documentwrapper">
73
 
        <div class="bodywrapper">
74
 
          <div class="body" role="main">
75
 
            
76
 
  <div class="section" id="more-control-flow-tools">
77
 
<span id="tut-morecontrol"></span><h1>4. More Control Flow Tools<a class="headerlink" href="#more-control-flow-tools" title="Permalink to this headline">¶</a></h1>
78
 
<p>Besides the <a class="reference internal" href="../reference/compound_stmts.html#while"><code class="xref std std-keyword docutils literal"><span class="pre">while</span></code></a> statement just introduced, Python knows the usual
79
 
control flow statements known from other languages, with some twists.</p>
80
 
<div class="section" id="if-statements">
81
 
<span id="tut-if"></span><h2>4.1. <a class="reference internal" href="../reference/compound_stmts.html#if"><code class="xref std std-keyword docutils literal"><span class="pre">if</span></code></a> Statements<a class="headerlink" href="#if-statements" title="Permalink to this headline">¶</a></h2>
82
 
<p>Perhaps the most well-known statement type is the <a class="reference internal" href="../reference/compound_stmts.html#if"><code class="xref std std-keyword docutils literal"><span class="pre">if</span></code></a> statement.  For
83
 
example:</p>
84
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">x</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s2">&quot;Please enter an integer: &quot;</span><span class="p">))</span>
85
 
<span class="go">Please enter an integer: 42</span>
86
 
<span class="gp">&gt;&gt;&gt; </span><span class="k">if</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
87
 
<span class="gp">... </span>    <span class="n">x</span> <span class="o">=</span> <span class="mi">0</span>
88
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Negative changed to zero&#39;</span><span class="p">)</span>
89
 
<span class="gp">... </span><span class="k">elif</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
90
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Zero&#39;</span><span class="p">)</span>
91
 
<span class="gp">... </span><span class="k">elif</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
92
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Single&#39;</span><span class="p">)</span>
93
 
<span class="gp">... </span><span class="k">else</span><span class="p">:</span>
94
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;More&#39;</span><span class="p">)</span>
95
 
<span class="gp">...</span>
96
 
<span class="go">More</span>
97
 
</pre></div>
98
 
</div>
99
 
<p>There can be zero or more <a class="reference internal" href="../reference/compound_stmts.html#elif"><code class="xref std std-keyword docutils literal"><span class="pre">elif</span></code></a> parts, and the <a class="reference internal" href="../reference/compound_stmts.html#else"><code class="xref std std-keyword docutils literal"><span class="pre">else</span></code></a> part is
100
 
optional.  The keyword &#8216;<a class="reference internal" href="../reference/compound_stmts.html#elif"><code class="xref std std-keyword docutils literal"><span class="pre">elif</span></code></a>&#8216; is short for &#8216;else if&#8217;, and is useful
101
 
to avoid excessive indentation.  An  <a class="reference internal" href="../reference/compound_stmts.html#if"><code class="xref std std-keyword docutils literal"><span class="pre">if</span></code></a> ... <a class="reference internal" href="../reference/compound_stmts.html#elif"><code class="xref std std-keyword docutils literal"><span class="pre">elif</span></code></a> ...
102
 
<a class="reference internal" href="../reference/compound_stmts.html#elif"><code class="xref std std-keyword docutils literal"><span class="pre">elif</span></code></a> ... sequence is a substitute for the <code class="docutils literal"><span class="pre">switch</span></code> or
103
 
<code class="docutils literal"><span class="pre">case</span></code> statements found in other languages.</p>
104
 
</div>
105
 
<div class="section" id="for-statements">
106
 
<span id="tut-for"></span><h2>4.2. <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a> Statements<a class="headerlink" href="#for-statements" title="Permalink to this headline">¶</a></h2>
107
 
<p id="index-0">The <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a> statement in Python differs a bit from what you may be used
108
 
to in C or Pascal.  Rather than always iterating over an arithmetic progression
109
 
of numbers (like in Pascal), or giving the user the ability to define both the
110
 
iteration step and halting condition (as C), Python&#8217;s <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a> statement
111
 
iterates over the items of any sequence (a list or a string), in the order that
112
 
they appear in the sequence.  For example (no pun intended):</p>
113
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="c1"># Measure some strings:</span>
114
 
<span class="gp">... </span><span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;cat&#39;</span><span class="p">,</span> <span class="s1">&#39;window&#39;</span><span class="p">,</span> <span class="s1">&#39;defenestrate&#39;</span><span class="p">]</span>
115
 
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">words</span><span class="p">:</span>
116
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">w</span><span class="p">))</span>
117
 
<span class="gp">...</span>
118
 
<span class="go">cat 3</span>
119
 
<span class="go">window 6</span>
120
 
<span class="go">defenestrate 12</span>
121
 
</pre></div>
122
 
</div>
123
 
<p>If you need to modify the sequence you are iterating over while inside the loop
124
 
(for example to duplicate selected items), it is recommended that you first
125
 
make a copy.  Iterating over a sequence does not implicitly make a copy.  The
126
 
slice notation makes this especially convenient:</p>
127
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">words</span><span class="p">[:]:</span>  <span class="c1"># Loop over a slice copy of the entire list.</span>
128
 
<span class="gp">... </span>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">w</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">6</span><span class="p">:</span>
129
 
<span class="gp">... </span>        <span class="n">words</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">w</span><span class="p">)</span>
130
 
<span class="gp">...</span>
131
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">words</span>
132
 
<span class="go">[&#39;defenestrate&#39;, &#39;cat&#39;, &#39;window&#39;, &#39;defenestrate&#39;]</span>
133
 
</pre></div>
134
 
</div>
135
 
</div>
136
 
<div class="section" id="the-range-function">
137
 
<span id="tut-range"></span><h2>4.3. The <a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a> Function<a class="headerlink" href="#the-range-function" title="Permalink to this headline">¶</a></h2>
138
 
<p>If you do need to iterate over a sequence of numbers, the built-in function
139
 
<a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a> comes in handy.  It generates arithmetic progressions:</p>
140
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
141
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
142
 
<span class="gp">...</span>
143
 
<span class="go">0</span>
144
 
<span class="go">1</span>
145
 
<span class="go">2</span>
146
 
<span class="go">3</span>
147
 
<span class="go">4</span>
148
 
</pre></div>
149
 
</div>
150
 
<p>The given end point is never part of the generated sequence; <code class="docutils literal"><span class="pre">range(10)</span></code> generates
151
 
10 values, the legal indices for items of a sequence of length 10.  It
152
 
is possible to let the range start at another number, or to specify a different
153
 
increment (even negative; sometimes this is called the &#8216;step&#8217;):</p>
154
 
<div class="highlight-python3"><div class="highlight"><pre><span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
155
 
   <span class="mi">5</span> <span class="n">through</span> <span class="mi">9</span>
156
 
 
157
 
<span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
158
 
   <span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">9</span>
159
 
 
160
 
<span class="nb">range</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="o">-</span><span class="mi">100</span><span class="p">,</span> <span class="o">-</span><span class="mi">30</span><span class="p">)</span>
161
 
  <span class="o">-</span><span class="mi">10</span><span class="p">,</span> <span class="o">-</span><span class="mi">40</span><span class="p">,</span> <span class="o">-</span><span class="mi">70</span>
162
 
</pre></div>
163
 
</div>
164
 
<p>To iterate over the indices of a sequence, you can combine <a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a> and
165
 
<a class="reference internal" href="../library/functions.html#len" title="len"><code class="xref py py-func docutils literal"><span class="pre">len()</span></code></a> as follows:</p>
166
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">a</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Mary&#39;</span><span class="p">,</span> <span class="s1">&#39;had&#39;</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;little&#39;</span><span class="p">,</span> <span class="s1">&#39;lamb&#39;</span><span class="p">]</span>
167
 
<span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)):</span>
168
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
169
 
<span class="gp">...</span>
170
 
<span class="go">0 Mary</span>
171
 
<span class="go">1 had</span>
172
 
<span class="go">2 a</span>
173
 
<span class="go">3 little</span>
174
 
<span class="go">4 lamb</span>
175
 
</pre></div>
176
 
</div>
177
 
<p>In most such cases, however, it is convenient to use the <a class="reference internal" href="../library/functions.html#enumerate" title="enumerate"><code class="xref py py-func docutils literal"><span class="pre">enumerate()</span></code></a>
178
 
function, see <a class="reference internal" href="datastructures.html#tut-loopidioms"><span>Looping Techniques</span></a>.</p>
179
 
<p>A strange thing happens if you just print a range:</p>
180
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span>
181
 
<span class="go">range(0, 10)</span>
182
 
</pre></div>
183
 
</div>
184
 
<p>In many ways the object returned by <a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a> behaves as if it is a list,
185
 
but in fact it isn&#8217;t. It is an object which returns the successive items of
186
 
the desired sequence when you iterate over it, but it doesn&#8217;t really make
187
 
the list, thus saving space.</p>
188
 
<p>We say such an object is <em>iterable</em>, that is, suitable as a target for
189
 
functions and constructs that expect something from which they can
190
 
obtain successive items until the supply is exhausted. We have seen that
191
 
the <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a> statement is such an <em>iterator</em>. The function <a class="reference internal" href="../library/stdtypes.html#list" title="list"><code class="xref py py-func docutils literal"><span class="pre">list()</span></code></a>
192
 
is another; it creates lists from iterables:</p>
193
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">))</span>
194
 
<span class="go">[0, 1, 2, 3, 4]</span>
195
 
</pre></div>
196
 
</div>
197
 
<p>Later we will see more functions that return iterables and take iterables as argument.</p>
198
 
</div>
199
 
<div class="section" id="break-and-continue-statements-and-else-clauses-on-loops">
200
 
<span id="tut-break"></span><h2>4.4. <a class="reference internal" href="../reference/simple_stmts.html#break"><code class="xref std std-keyword docutils literal"><span class="pre">break</span></code></a> and <a class="reference internal" href="../reference/simple_stmts.html#continue"><code class="xref std std-keyword docutils literal"><span class="pre">continue</span></code></a> Statements, and <a class="reference internal" href="../reference/compound_stmts.html#else"><code class="xref std std-keyword docutils literal"><span class="pre">else</span></code></a> Clauses on Loops<a class="headerlink" href="#break-and-continue-statements-and-else-clauses-on-loops" title="Permalink to this headline">¶</a></h2>
201
 
<p>The <a class="reference internal" href="../reference/simple_stmts.html#break"><code class="xref std std-keyword docutils literal"><span class="pre">break</span></code></a> statement, like in C, breaks out of the smallest enclosing
202
 
<a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a> or <a class="reference internal" href="../reference/compound_stmts.html#while"><code class="xref std std-keyword docutils literal"><span class="pre">while</span></code></a> loop.</p>
203
 
<p>Loop statements may have an <code class="docutils literal"><span class="pre">else</span></code> clause; it is executed when the loop
204
 
terminates through exhaustion of the list (with <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a>) or when the
205
 
condition becomes false (with <a class="reference internal" href="../reference/compound_stmts.html#while"><code class="xref std std-keyword docutils literal"><span class="pre">while</span></code></a>), but not when the loop is
206
 
terminated by a <a class="reference internal" href="../reference/simple_stmts.html#break"><code class="xref std std-keyword docutils literal"><span class="pre">break</span></code></a> statement.  This is exemplified by the
207
 
following loop, which searches for prime numbers:</p>
208
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span>
209
 
<span class="gp">... </span>    <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
210
 
<span class="gp">... </span>        <span class="k">if</span> <span class="n">n</span> <span class="o">%</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
211
 
<span class="gp">... </span>            <span class="nb">print</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="s1">&#39;equals&#39;</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="n">n</span><span class="o">//</span><span class="n">x</span><span class="p">)</span>
212
 
<span class="gp">... </span>            <span class="k">break</span>
213
 
<span class="gp">... </span>    <span class="k">else</span><span class="p">:</span>
214
 
<span class="gp">... </span>        <span class="c1"># loop fell through without finding a factor</span>
215
 
<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="s1">&#39;is a prime number&#39;</span><span class="p">)</span>
216
 
<span class="gp">...</span>
217
 
<span class="go">2 is a prime number</span>
218
 
<span class="go">3 is a prime number</span>
219
 
<span class="go">4 equals 2 * 2</span>
220
 
<span class="go">5 is a prime number</span>
221
 
<span class="go">6 equals 2 * 3</span>
222
 
<span class="go">7 is a prime number</span>
223
 
<span class="go">8 equals 2 * 4</span>
224
 
<span class="go">9 equals 3 * 3</span>
225
 
</pre></div>
226
 
</div>
227
 
<p>(Yes, this is the correct code.  Look closely: the <code class="docutils literal"><span class="pre">else</span></code> clause belongs to
228
 
the <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal"><span class="pre">for</span></code></a> loop, <strong>not</strong> the <a class="reference internal" href="../reference/compound_stmts.html#if"><code class="xref std std-keyword docutils literal"><span class="pre">if</span></code></a> statement.)</p>
229
 
<p>When used with a loop, the <code class="docutils literal"><span class="pre">else</span></code> clause has more in common with the
230
 
<code class="docutils literal"><span class="pre">else</span></code> clause of a <a class="reference internal" href="../reference/compound_stmts.html#try"><code class="xref std std-keyword docutils literal"><span class="pre">try</span></code></a> statement than it does that of
231
 
<a class="reference internal" href="../reference/compound_stmts.html#if"><code class="xref std std-keyword docutils literal"><span class="pre">if</span></code></a> statements: a <a class="reference internal" href="../reference/compound_stmts.html#try"><code class="xref std std-keyword docutils literal"><span class="pre">try</span></code></a> statement&#8217;s <code class="docutils literal"><span class="pre">else</span></code> clause runs
232
 
when no exception occurs, and a loop&#8217;s <code class="docutils literal"><span class="pre">else</span></code> clause runs when no <code class="docutils literal"><span class="pre">break</span></code>
233
 
occurs. For more on the <a class="reference internal" href="../reference/compound_stmts.html#try"><code class="xref std std-keyword docutils literal"><span class="pre">try</span></code></a> statement and exceptions, see
234
 
<a class="reference internal" href="errors.html#tut-handling"><span>Handling Exceptions</span></a>.</p>
235
 
<p>The <a class="reference internal" href="../reference/simple_stmts.html#continue"><code class="xref std std-keyword docutils literal"><span class="pre">continue</span></code></a> statement, also borrowed from C, continues with the next
236
 
iteration of the loop:</p>
237
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">10</span><span class="p">):</span>
238
 
<span class="gp">... </span>    <span class="k">if</span> <span class="n">num</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
239
 
<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Found an even number&quot;</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
240
 
<span class="gp">... </span>        <span class="k">continue</span>
241
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Found a number&quot;</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
242
 
<span class="go">Found an even number 2</span>
243
 
<span class="go">Found a number 3</span>
244
 
<span class="go">Found an even number 4</span>
245
 
<span class="go">Found a number 5</span>
246
 
<span class="go">Found an even number 6</span>
247
 
<span class="go">Found a number 7</span>
248
 
<span class="go">Found an even number 8</span>
249
 
<span class="go">Found a number 9</span>
250
 
</pre></div>
251
 
</div>
252
 
</div>
253
 
<div class="section" id="pass-statements">
254
 
<span id="tut-pass"></span><h2>4.5. <a class="reference internal" href="../reference/simple_stmts.html#pass"><code class="xref std std-keyword docutils literal"><span class="pre">pass</span></code></a> Statements<a class="headerlink" href="#pass-statements" title="Permalink to this headline">¶</a></h2>
255
 
<p>The <a class="reference internal" href="../reference/simple_stmts.html#pass"><code class="xref std std-keyword docutils literal"><span class="pre">pass</span></code></a> statement does nothing. It can be used when a statement is
256
 
required syntactically but the program requires no action. For example:</p>
257
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
258
 
<span class="gp">... </span>    <span class="k">pass</span>  <span class="c1"># Busy-wait for keyboard interrupt (Ctrl+C)</span>
259
 
<span class="gp">...</span>
260
 
</pre></div>
261
 
</div>
262
 
<p>This is commonly used for creating minimal classes:</p>
263
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyEmptyClass</span><span class="p">:</span>
264
 
<span class="gp">... </span>    <span class="k">pass</span>
265
 
<span class="gp">...</span>
266
 
</pre></div>
267
 
</div>
268
 
<p>Another place <a class="reference internal" href="../reference/simple_stmts.html#pass"><code class="xref std std-keyword docutils literal"><span class="pre">pass</span></code></a> can be used is as a place-holder for a function or
269
 
conditional body when you are working on new code, allowing you to keep thinking
270
 
at a more abstract level.  The <a class="reference internal" href="../reference/simple_stmts.html#pass"><code class="xref std std-keyword docutils literal"><span class="pre">pass</span></code></a> is silently ignored:</p>
271
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">initlog</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
272
 
<span class="gp">... </span>    <span class="k">pass</span>   <span class="c1"># Remember to implement this!</span>
273
 
<span class="gp">...</span>
274
 
</pre></div>
275
 
</div>
276
 
</div>
277
 
<div class="section" id="defining-functions">
278
 
<span id="tut-functions"></span><h2>4.6. Defining Functions<a class="headerlink" href="#defining-functions" title="Permalink to this headline">¶</a></h2>
279
 
<p>We can create a function that writes the Fibonacci series to an arbitrary
280
 
boundary:</p>
281
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>    <span class="c1"># write Fibonacci series up to n</span>
282
 
<span class="gp">... </span>    <span class="sd">&quot;&quot;&quot;Print a Fibonacci series up to n.&quot;&quot;&quot;</span>
283
 
<span class="gp">... </span>    <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
284
 
<span class="gp">... </span>    <span class="k">while</span> <span class="n">a</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">:</span>
285
 
<span class="gp">... </span>        <span class="nb">print</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
286
 
<span class="gp">... </span>        <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span>
287
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">()</span>
288
 
<span class="gp">...</span>
289
 
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># Now call the function we just defined:</span>
290
 
<span class="gp">... </span><span class="n">fib</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
291
 
<span class="go">0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597</span>
292
 
</pre></div>
293
 
</div>
294
 
<p id="index-1">The keyword <a class="reference internal" href="../reference/compound_stmts.html#def"><code class="xref std std-keyword docutils literal"><span class="pre">def</span></code></a> introduces a function <em>definition</em>.  It must be
295
 
followed by the function name and the parenthesized list of formal parameters.
296
 
The statements that form the body of the function start at the next line, and
297
 
must be indented.</p>
298
 
<p>The first statement of the function body can optionally be a string literal;
299
 
this string literal is the function&#8217;s documentation string, or <em class="dfn">docstring</em>.
300
 
(More about docstrings can be found in the section <a class="reference internal" href="#tut-docstrings"><span>Documentation Strings</span></a>.)
301
 
There are tools which use docstrings to automatically produce online or printed
302
 
documentation, or to let the user interactively browse through code; it&#8217;s good
303
 
practice to include docstrings in code that you write, so make a habit of it.</p>
304
 
<p>The <em>execution</em> of a function introduces a new symbol table used for the local
305
 
variables of the function.  More precisely, all variable assignments in a
306
 
function store the value in the local symbol table; whereas variable references
307
 
first look in the local symbol table, then in the local symbol tables of
308
 
enclosing functions, then in the global symbol table, and finally in the table
309
 
of built-in names. Thus, global variables cannot be directly assigned a value
310
 
within a function (unless named in a <a class="reference internal" href="../reference/simple_stmts.html#global"><code class="xref std std-keyword docutils literal"><span class="pre">global</span></code></a> statement), although they
311
 
may be referenced.</p>
312
 
<p>The actual parameters (arguments) to a function call are introduced in the local
313
 
symbol table of the called function when it is called; thus, arguments are
314
 
passed using <em>call by value</em> (where the <em>value</em> is always an object <em>reference</em>,
315
 
not the value of the object). <a class="footnote-reference" href="#id2" id="id1">[1]</a> When a function calls another function, a new
316
 
local symbol table is created for that call.</p>
317
 
<p>A function definition introduces the function name in the current symbol table.
318
 
The value of the function name has a type that is recognized by the interpreter
319
 
as a user-defined function.  This value can be assigned to another name which
320
 
can then also be used as a function.  This serves as a general renaming
321
 
mechanism:</p>
322
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">fib</span>
323
 
<span class="go">&lt;function fib at 10042ed0&gt;</span>
324
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="n">fib</span>
325
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
326
 
<span class="go">0 1 1 2 3 5 8 13 21 34 55 89</span>
327
 
</pre></div>
328
 
</div>
329
 
<p>Coming from other languages, you might object that <code class="docutils literal"><span class="pre">fib</span></code> is not a function but
330
 
a procedure since it doesn&#8217;t return a value.  In fact, even functions without a
331
 
<a class="reference internal" href="../reference/simple_stmts.html#return"><code class="xref std std-keyword docutils literal"><span class="pre">return</span></code></a> statement do return a value, albeit a rather boring one.  This
332
 
value is called <code class="docutils literal"><span class="pre">None</span></code> (it&#8217;s a built-in name).  Writing the value <code class="docutils literal"><span class="pre">None</span></code> is
333
 
normally suppressed by the interpreter if it would be the only value written.
334
 
You can see it if you really want to using <a class="reference internal" href="../library/functions.html#print" title="print"><code class="xref py py-func docutils literal"><span class="pre">print()</span></code></a>:</p>
335
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">fib</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
336
 
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">fib</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
337
 
<span class="go">None</span>
338
 
</pre></div>
339
 
</div>
340
 
<p>It is simple to write a function that returns a list of the numbers of the
341
 
Fibonacci series, instead of printing it:</p>
342
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">fib2</span><span class="p">(</span><span class="n">n</span><span class="p">):</span> <span class="c1"># return Fibonacci series up to n</span>
343
 
<span class="gp">... </span>    <span class="sd">&quot;&quot;&quot;Return a list containing the Fibonacci series up to n.&quot;&quot;&quot;</span>
344
 
<span class="gp">... </span>    <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
345
 
<span class="gp">... </span>    <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
346
 
<span class="gp">... </span>    <span class="k">while</span> <span class="n">a</span> <span class="o">&lt;</span> <span class="n">n</span><span class="p">:</span>
347
 
<span class="gp">... </span>        <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>    <span class="c1"># see below</span>
348
 
<span class="gp">... </span>        <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span>
349
 
<span class="gp">... </span>    <span class="k">return</span> <span class="n">result</span>
350
 
<span class="gp">...</span>
351
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f100</span> <span class="o">=</span> <span class="n">fib2</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>    <span class="c1"># call it</span>
352
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f100</span>                <span class="c1"># write the result</span>
353
 
<span class="go">[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]</span>
354
 
</pre></div>
355
 
</div>
356
 
<p>This example, as usual, demonstrates some new Python features:</p>
357
 
<ul class="simple">
358
 
<li>The <a class="reference internal" href="../reference/simple_stmts.html#return"><code class="xref std std-keyword docutils literal"><span class="pre">return</span></code></a> statement returns with a value from a function.
359
 
<a class="reference internal" href="../reference/simple_stmts.html#return"><code class="xref std std-keyword docutils literal"><span class="pre">return</span></code></a> without an expression argument returns <code class="docutils literal"><span class="pre">None</span></code>. Falling off
360
 
the end of a function also returns <code class="docutils literal"><span class="pre">None</span></code>.</li>
361
 
<li>The statement <code class="docutils literal"><span class="pre">result.append(a)</span></code> calls a <em>method</em> of the list object
362
 
<code class="docutils literal"><span class="pre">result</span></code>.  A method is a function that &#8216;belongs&#8217; to an object and is named
363
 
<code class="docutils literal"><span class="pre">obj.methodname</span></code>, where <code class="docutils literal"><span class="pre">obj</span></code> is some object (this may be an expression),
364
 
and <code class="docutils literal"><span class="pre">methodname</span></code> is the name of a method that is defined by the object&#8217;s type.
365
 
Different types define different methods.  Methods of different types may have
366
 
the same name without causing ambiguity.  (It is possible to define your own
367
 
object types and methods, using <em>classes</em>, see <a class="reference internal" href="classes.html#tut-classes"><span>Classes</span></a>)
368
 
The method <code class="xref py py-meth docutils literal"><span class="pre">append()</span></code> shown in the example is defined for list objects; it
369
 
adds a new element at the end of the list.  In this example it is equivalent to
370
 
<code class="docutils literal"><span class="pre">result</span> <span class="pre">=</span> <span class="pre">result</span> <span class="pre">+</span> <span class="pre">[a]</span></code>, but more efficient.</li>
371
 
</ul>
372
 
</div>
373
 
<div class="section" id="more-on-defining-functions">
374
 
<span id="tut-defining"></span><h2>4.7. More on Defining Functions<a class="headerlink" href="#more-on-defining-functions" title="Permalink to this headline">¶</a></h2>
375
 
<p>It is also possible to define functions with a variable number of arguments.
376
 
There are three forms, which can be combined.</p>
377
 
<div class="section" id="default-argument-values">
378
 
<span id="tut-defaultargs"></span><h3>4.7.1. Default Argument Values<a class="headerlink" href="#default-argument-values" title="Permalink to this headline">¶</a></h3>
379
 
<p>The most useful form is to specify a default value for one or more arguments.
380
 
This creates a function that can be called with fewer arguments than it is
381
 
defined to allow.  For example:</p>
382
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">ask_ok</span><span class="p">(</span><span class="n">prompt</span><span class="p">,</span> <span class="n">retries</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">complaint</span><span class="o">=</span><span class="s1">&#39;Yes or no, please!&#39;</span><span class="p">):</span>
383
 
    <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
384
 
        <span class="n">ok</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="n">prompt</span><span class="p">)</span>
385
 
        <span class="k">if</span> <span class="n">ok</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">,</span> <span class="s1">&#39;ye&#39;</span><span class="p">,</span> <span class="s1">&#39;yes&#39;</span><span class="p">):</span>
386
 
            <span class="k">return</span> <span class="kc">True</span>
387
 
        <span class="k">if</span> <span class="n">ok</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;no&#39;</span><span class="p">,</span> <span class="s1">&#39;nop&#39;</span><span class="p">,</span> <span class="s1">&#39;nope&#39;</span><span class="p">):</span>
388
 
            <span class="k">return</span> <span class="kc">False</span>
389
 
        <span class="n">retries</span> <span class="o">=</span> <span class="n">retries</span> <span class="o">-</span> <span class="mi">1</span>
390
 
        <span class="k">if</span> <span class="n">retries</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
391
 
            <span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s1">&#39;uncooperative user&#39;</span><span class="p">)</span>
392
 
        <span class="nb">print</span><span class="p">(</span><span class="n">complaint</span><span class="p">)</span>
393
 
</pre></div>
394
 
</div>
395
 
<p>This function can be called in several ways:</p>
396
 
<ul class="simple">
397
 
<li>giving only the mandatory argument:
398
 
<code class="docutils literal"><span class="pre">ask_ok('Do</span> <span class="pre">you</span> <span class="pre">really</span> <span class="pre">want</span> <span class="pre">to</span> <span class="pre">quit?')</span></code></li>
399
 
<li>giving one of the optional arguments:
400
 
<code class="docutils literal"><span class="pre">ask_ok('OK</span> <span class="pre">to</span> <span class="pre">overwrite</span> <span class="pre">the</span> <span class="pre">file?',</span> <span class="pre">2)</span></code></li>
401
 
<li>or even giving all arguments:
402
 
<code class="docutils literal"><span class="pre">ask_ok('OK</span> <span class="pre">to</span> <span class="pre">overwrite</span> <span class="pre">the</span> <span class="pre">file?',</span> <span class="pre">2,</span> <span class="pre">'Come</span> <span class="pre">on,</span> <span class="pre">only</span> <span class="pre">yes</span> <span class="pre">or</span> <span class="pre">no!')</span></code></li>
403
 
</ul>
404
 
<p>This example also introduces the <a class="reference internal" href="../reference/expressions.html#in"><code class="xref std std-keyword docutils literal"><span class="pre">in</span></code></a> keyword. This tests whether or
405
 
not a sequence contains a certain value.</p>
406
 
<p>The default values are evaluated at the point of function definition in the
407
 
<em>defining</em> scope, so that</p>
408
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">i</span> <span class="o">=</span> <span class="mi">5</span>
409
 
 
410
 
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="n">i</span><span class="p">):</span>
411
 
    <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
412
 
 
413
 
<span class="n">i</span> <span class="o">=</span> <span class="mi">6</span>
414
 
<span class="n">f</span><span class="p">()</span>
415
 
</pre></div>
416
 
</div>
417
 
<p>will print <code class="docutils literal"><span class="pre">5</span></code>.</p>
418
 
<p><strong>Important warning:</strong>  The default value is evaluated only once. This makes a
419
 
difference when the default is a mutable object such as a list, dictionary, or
420
 
instances of most classes.  For example, the following function accumulates the
421
 
arguments passed to it on subsequent calls:</p>
422
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">L</span><span class="o">=</span><span class="p">[]):</span>
423
 
    <span class="n">L</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
424
 
    <span class="k">return</span> <span class="n">L</span>
425
 
 
426
 
<span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
427
 
<span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="mi">2</span><span class="p">))</span>
428
 
<span class="nb">print</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="mi">3</span><span class="p">))</span>
429
 
</pre></div>
430
 
</div>
431
 
<p>This will print</p>
432
 
<div class="highlight-python3"><div class="highlight"><pre><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
433
 
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
434
 
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
435
 
</pre></div>
436
 
</div>
437
 
<p>If you don&#8217;t want the default to be shared between subsequent calls, you can
438
 
write the function like this instead:</p>
439
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">L</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
440
 
    <span class="k">if</span> <span class="n">L</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
441
 
        <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span>
442
 
    <span class="n">L</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
443
 
    <span class="k">return</span> <span class="n">L</span>
444
 
</pre></div>
445
 
</div>
446
 
</div>
447
 
<div class="section" id="keyword-arguments">
448
 
<span id="tut-keywordargs"></span><h3>4.7.2. Keyword Arguments<a class="headerlink" href="#keyword-arguments" title="Permalink to this headline">¶</a></h3>
449
 
<p>Functions can also be called using <a class="reference internal" href="../glossary.html#term-keyword-argument"><span class="xref std std-term">keyword arguments</span></a>
450
 
of the form <code class="docutils literal"><span class="pre">kwarg=value</span></code>.  For instance, the following function:</p>
451
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">parrot</span><span class="p">(</span><span class="n">voltage</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="s1">&#39;a stiff&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;voom&#39;</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s1">&#39;Norwegian Blue&#39;</span><span class="p">):</span>
452
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-- This parrot wouldn&#39;t&quot;</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
453
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;if you put&quot;</span><span class="p">,</span> <span class="n">voltage</span><span class="p">,</span> <span class="s2">&quot;volts through it.&quot;</span><span class="p">)</span>
454
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-- Lovely plumage, the&quot;</span><span class="p">,</span> <span class="nb">type</span><span class="p">)</span>
455
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-- It&#39;s&quot;</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="s2">&quot;!&quot;</span><span class="p">)</span>
456
 
</pre></div>
457
 
</div>
458
 
<p>accepts one required argument (<code class="docutils literal"><span class="pre">voltage</span></code>) and three optional arguments
459
 
(<code class="docutils literal"><span class="pre">state</span></code>, <code class="docutils literal"><span class="pre">action</span></code>, and <code class="docutils literal"><span class="pre">type</span></code>).  This function can be called in any
460
 
of the following ways:</p>
461
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">parrot</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span>                                          <span class="c1"># 1 positional argument</span>
462
 
<span class="n">parrot</span><span class="p">(</span><span class="n">voltage</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>                                  <span class="c1"># 1 keyword argument</span>
463
 
<span class="n">parrot</span><span class="p">(</span><span class="n">voltage</span><span class="o">=</span><span class="mi">1000000</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;VOOOOOM&#39;</span><span class="p">)</span>             <span class="c1"># 2 keyword arguments</span>
464
 
<span class="n">parrot</span><span class="p">(</span><span class="n">action</span><span class="o">=</span><span class="s1">&#39;VOOOOOM&#39;</span><span class="p">,</span> <span class="n">voltage</span><span class="o">=</span><span class="mi">1000000</span><span class="p">)</span>             <span class="c1"># 2 keyword arguments</span>
465
 
<span class="n">parrot</span><span class="p">(</span><span class="s1">&#39;a million&#39;</span><span class="p">,</span> <span class="s1">&#39;bereft of life&#39;</span><span class="p">,</span> <span class="s1">&#39;jump&#39;</span><span class="p">)</span>         <span class="c1"># 3 positional arguments</span>
466
 
<span class="n">parrot</span><span class="p">(</span><span class="s1">&#39;a thousand&#39;</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="s1">&#39;pushing up the daisies&#39;</span><span class="p">)</span>  <span class="c1"># 1 positional, 1 keyword</span>
467
 
</pre></div>
468
 
</div>
469
 
<p>but all the following calls would be invalid:</p>
470
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">parrot</span><span class="p">()</span>                     <span class="c1"># required argument missing</span>
471
 
<span class="n">parrot</span><span class="p">(</span><span class="n">voltage</span><span class="o">=</span><span class="mf">5.0</span><span class="p">,</span> <span class="s1">&#39;dead&#39;</span><span class="p">)</span>  <span class="c1"># non-keyword argument after a keyword argument</span>
472
 
<span class="n">parrot</span><span class="p">(</span><span class="mi">110</span><span class="p">,</span> <span class="n">voltage</span><span class="o">=</span><span class="mi">220</span><span class="p">)</span>     <span class="c1"># duplicate value for the same argument</span>
473
 
<span class="n">parrot</span><span class="p">(</span><span class="n">actor</span><span class="o">=</span><span class="s1">&#39;John Cleese&#39;</span><span class="p">)</span>  <span class="c1"># unknown keyword argument</span>
474
 
</pre></div>
475
 
</div>
476
 
<p>In a function call, keyword arguments must follow positional arguments.
477
 
All the keyword arguments passed must match one of the arguments
478
 
accepted by the function (e.g. <code class="docutils literal"><span class="pre">actor</span></code> is not a valid argument for the
479
 
<code class="docutils literal"><span class="pre">parrot</span></code> function), and their order is not important.  This also includes
480
 
non-optional arguments (e.g. <code class="docutils literal"><span class="pre">parrot(voltage=1000)</span></code> is valid too).
481
 
No argument may receive a value more than once.
482
 
Here&#8217;s an example that fails due to this restriction:</p>
483
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">function</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
484
 
<span class="gp">... </span>    <span class="k">pass</span>
485
 
<span class="gp">...</span>
486
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">function</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">a</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
487
 
<span class="gt">Traceback (most recent call last):</span>
488
 
  File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">?</span>
489
 
<span class="gr">TypeError</span>: <span class="n">function() got multiple values for keyword argument &#39;a&#39;</span>
490
 
</pre></div>
491
 
</div>
492
 
<p>When a final formal parameter of the form <code class="docutils literal"><span class="pre">**name</span></code> is present, it receives a
493
 
dictionary (see <a class="reference internal" href="../library/stdtypes.html#typesmapping"><span>Mapping Types &#8212; dict</span></a>) containing all keyword arguments except for
494
 
those corresponding to a formal parameter.  This may be combined with a formal
495
 
parameter of the form <code class="docutils literal"><span class="pre">*name</span></code> (described in the next subsection) which
496
 
receives a tuple containing the positional arguments beyond the formal parameter
497
 
list.  (<code class="docutils literal"><span class="pre">*name</span></code> must occur before <code class="docutils literal"><span class="pre">**name</span></code>.) For example, if we define a
498
 
function like this:</p>
499
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">cheeseshop</span><span class="p">(</span><span class="n">kind</span><span class="p">,</span> <span class="o">*</span><span class="n">arguments</span><span class="p">,</span> <span class="o">**</span><span class="n">keywords</span><span class="p">):</span>
500
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-- Do you have any&quot;</span><span class="p">,</span> <span class="n">kind</span><span class="p">,</span> <span class="s2">&quot;?&quot;</span><span class="p">)</span>
501
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-- I&#39;m sorry, we&#39;re all out of&quot;</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span>
502
 
    <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">arguments</span><span class="p">:</span>
503
 
        <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
504
 
    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-&quot;</span> <span class="o">*</span> <span class="mi">40</span><span class="p">)</span>
505
 
    <span class="n">keys</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">keywords</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
506
 
    <span class="k">for</span> <span class="n">kw</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span>
507
 
        <span class="nb">print</span><span class="p">(</span><span class="n">kw</span><span class="p">,</span> <span class="s2">&quot;:&quot;</span><span class="p">,</span> <span class="n">keywords</span><span class="p">[</span><span class="n">kw</span><span class="p">])</span>
508
 
</pre></div>
509
 
</div>
510
 
<p>It could be called like this:</p>
511
 
<div class="highlight-python3"><div class="highlight"><pre><span class="n">cheeseshop</span><span class="p">(</span><span class="s2">&quot;Limburger&quot;</span><span class="p">,</span> <span class="s2">&quot;It&#39;s very runny, sir.&quot;</span><span class="p">,</span>
512
 
           <span class="s2">&quot;It&#39;s really very, VERY runny, sir.&quot;</span><span class="p">,</span>
513
 
           <span class="n">shopkeeper</span><span class="o">=</span><span class="s2">&quot;Michael Palin&quot;</span><span class="p">,</span>
514
 
           <span class="n">client</span><span class="o">=</span><span class="s2">&quot;John Cleese&quot;</span><span class="p">,</span>
515
 
           <span class="n">sketch</span><span class="o">=</span><span class="s2">&quot;Cheese Shop Sketch&quot;</span><span class="p">)</span>
516
 
</pre></div>
517
 
</div>
518
 
<p>and of course it would print:</p>
519
 
<div class="highlight-python3"><div class="highlight"><pre>-- Do you have any Limburger ?
520
 
It&#39;s very runny, sir.
521
 
It&#39;s really very, VERY runny, sir.
522
 
----------------------------------------
523
 
client : John Cleese
524
 
shopkeeper : Michael Palin
525
 
sketch : Cheese Shop Sketch
526
 
</pre></div>
527
 
</div>
528
 
<p>Note that the list of keyword argument names is created by sorting the result
529
 
of the keywords dictionary&#8217;s <code class="docutils literal"><span class="pre">keys()</span></code> method before printing its contents;
530
 
if this is not done, the order in which the arguments are printed is undefined.</p>
531
 
</div>
532
 
<div class="section" id="arbitrary-argument-lists">
533
 
<span id="tut-arbitraryargs"></span><h3>4.7.3. Arbitrary Argument Lists<a class="headerlink" href="#arbitrary-argument-lists" title="Permalink to this headline">¶</a></h3>
534
 
<p id="index-2">Finally, the least frequently used option is to specify that a function can be
535
 
called with an arbitrary number of arguments.  These arguments will be wrapped
536
 
up in a tuple (see <a class="reference internal" href="datastructures.html#tut-tuples"><span>Tuples and Sequences</span></a>).  Before the variable number of arguments,
537
 
zero or more normal arguments may occur.</p>
538
 
<div class="highlight-python3"><div class="highlight"><pre><span class="k">def</span> <span class="nf">write_multiple_items</span><span class="p">(</span><span class="n">file</span><span class="p">,</span> <span class="n">separator</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
539
 
    <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">separator</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">))</span>
540
 
</pre></div>
541
 
</div>
542
 
<p>Normally, these <code class="docutils literal"><span class="pre">variadic</span></code> arguments will be last in the list of formal
543
 
parameters, because they scoop up all remaining input arguments that are
544
 
passed to the function. Any formal parameters which occur after the <code class="docutils literal"><span class="pre">*args</span></code>
545
 
parameter are &#8216;keyword-only&#8217; arguments, meaning that they can only be used as
546
 
keywords rather than positional arguments.</p>
547
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">concat</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;/&quot;</span><span class="p">):</span>
548
 
<span class="gp">... </span>   <span class="k">return</span> <span class="n">sep</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
549
 
<span class="gp">...</span>
550
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">concat</span><span class="p">(</span><span class="s2">&quot;earth&quot;</span><span class="p">,</span> <span class="s2">&quot;mars&quot;</span><span class="p">,</span> <span class="s2">&quot;venus&quot;</span><span class="p">)</span>
551
 
<span class="go">&#39;earth/mars/venus&#39;</span>
552
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">concat</span><span class="p">(</span><span class="s2">&quot;earth&quot;</span><span class="p">,</span> <span class="s2">&quot;mars&quot;</span><span class="p">,</span> <span class="s2">&quot;venus&quot;</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
553
 
<span class="go">&#39;earth.mars.venus&#39;</span>
554
 
</pre></div>
555
 
</div>
556
 
</div>
557
 
<div class="section" id="unpacking-argument-lists">
558
 
<span id="tut-unpacking-arguments"></span><h3>4.7.4. Unpacking Argument Lists<a class="headerlink" href="#unpacking-argument-lists" title="Permalink to this headline">¶</a></h3>
559
 
<p>The reverse situation occurs when the arguments are already in a list or tuple
560
 
but need to be unpacked for a function call requiring separate positional
561
 
arguments.  For instance, the built-in <a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal"><span class="pre">range()</span></code></a> function expects separate
562
 
<em>start</em> and <em>stop</em> arguments.  If they are not available separately, write the
563
 
function call with the  <code class="docutils literal"><span class="pre">*</span></code>-operator to unpack the arguments out of a list
564
 
or tuple:</p>
565
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>            <span class="c1"># normal call with separate arguments</span>
566
 
<span class="go">[3, 4, 5]</span>
567
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">]</span>
568
 
<span class="gp">&gt;&gt;&gt; </span><span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">))</span>            <span class="c1"># call with arguments unpacked from a list</span>
569
 
<span class="go">[3, 4, 5]</span>
570
 
</pre></div>
571
 
</div>
572
 
<p id="index-3">In the same fashion, dictionaries can deliver keyword arguments with the <code class="docutils literal"><span class="pre">**</span></code>-operator:</p>
573
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">parrot</span><span class="p">(</span><span class="n">voltage</span><span class="p">,</span> <span class="n">state</span><span class="o">=</span><span class="s1">&#39;a stiff&#39;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s1">&#39;voom&#39;</span><span class="p">):</span>
574
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;-- This parrot wouldn&#39;t&quot;</span><span class="p">,</span> <span class="n">action</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
575
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;if you put&quot;</span><span class="p">,</span> <span class="n">voltage</span><span class="p">,</span> <span class="s2">&quot;volts through it.&quot;</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
576
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;E&#39;s&quot;</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="s2">&quot;!&quot;</span><span class="p">)</span>
577
 
<span class="gp">...</span>
578
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;voltage&quot;</span><span class="p">:</span> <span class="s2">&quot;four million&quot;</span><span class="p">,</span> <span class="s2">&quot;state&quot;</span><span class="p">:</span> <span class="s2">&quot;bleedin&#39; demised&quot;</span><span class="p">,</span> <span class="s2">&quot;action&quot;</span><span class="p">:</span> <span class="s2">&quot;VOOM&quot;</span><span class="p">}</span>
579
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">parrot</span><span class="p">(</span><span class="o">**</span><span class="n">d</span><span class="p">)</span>
580
 
<span class="go">-- This parrot wouldn&#39;t VOOM if you put four million volts through it. E&#39;s bleedin&#39; demised !</span>
581
 
</pre></div>
582
 
</div>
583
 
</div>
584
 
<div class="section" id="lambda-expressions">
585
 
<span id="tut-lambda"></span><h3>4.7.5. Lambda Expressions<a class="headerlink" href="#lambda-expressions" title="Permalink to this headline">¶</a></h3>
586
 
<p>Small anonymous functions can be created with the <a class="reference internal" href="../reference/expressions.html#lambda"><code class="xref std std-keyword docutils literal"><span class="pre">lambda</span></code></a> keyword.
587
 
This function returns the sum of its two arguments: <code class="docutils literal"><span class="pre">lambda</span> <span class="pre">a,</span> <span class="pre">b:</span> <span class="pre">a+b</span></code>.
588
 
Lambda functions can be used wherever function objects are required.  They are
589
 
syntactically restricted to a single expression.  Semantically, they are just
590
 
syntactic sugar for a normal function definition.  Like nested function
591
 
definitions, lambda functions can reference variables from the containing
592
 
scope:</p>
593
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">make_incrementor</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
594
 
<span class="gp">... </span>    <span class="k">return</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span> <span class="o">+</span> <span class="n">n</span>
595
 
<span class="gp">...</span>
596
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="n">make_incrementor</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
597
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
598
 
<span class="go">42</span>
599
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
600
 
<span class="go">43</span>
601
 
</pre></div>
602
 
</div>
603
 
<p>The above example uses a lambda expression to return a function.  Another use
604
 
is to pass a small function as an argument:</p>
605
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">pairs</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;one&#39;</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;two&#39;</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;three&#39;</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="s1">&#39;four&#39;</span><span class="p">)]</span>
606
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">pairs</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">pair</span><span class="p">:</span> <span class="n">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
607
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">pairs</span>
608
 
<span class="go">[(4, &#39;four&#39;), (1, &#39;one&#39;), (3, &#39;three&#39;), (2, &#39;two&#39;)]</span>
609
 
</pre></div>
610
 
</div>
611
 
</div>
612
 
<div class="section" id="documentation-strings">
613
 
<span id="tut-docstrings"></span><h3>4.7.6. Documentation Strings<a class="headerlink" href="#documentation-strings" title="Permalink to this headline">¶</a></h3>
614
 
<p id="index-4">Here are some conventions about the content and formatting of documentation
615
 
strings.</p>
616
 
<p>The first line should always be a short, concise summary of the object&#8217;s
617
 
purpose.  For brevity, it should not explicitly state the object&#8217;s name or type,
618
 
since these are available by other means (except if the name happens to be a
619
 
verb describing a function&#8217;s operation).  This line should begin with a capital
620
 
letter and end with a period.</p>
621
 
<p>If there are more lines in the documentation string, the second line should be
622
 
blank, visually separating the summary from the rest of the description.  The
623
 
following lines should be one or more paragraphs describing the object&#8217;s calling
624
 
conventions, its side effects, etc.</p>
625
 
<p>The Python parser does not strip indentation from multi-line string literals in
626
 
Python, so tools that process documentation have to strip indentation if
627
 
desired.  This is done using the following convention. The first non-blank line
628
 
<em>after</em> the first line of the string determines the amount of indentation for
629
 
the entire documentation string.  (We can&#8217;t use the first line since it is
630
 
generally adjacent to the string&#8217;s opening quotes so its indentation is not
631
 
apparent in the string literal.)  Whitespace &#8220;equivalent&#8221; to this indentation is
632
 
then stripped from the start of all lines of the string.  Lines that are
633
 
indented less should not occur, but if they occur all their leading whitespace
634
 
should be stripped.  Equivalence of whitespace should be tested after expansion
635
 
of tabs (to 8 spaces, normally).</p>
636
 
<p>Here is an example of a multi-line docstring:</p>
637
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">my_function</span><span class="p">():</span>
638
 
<span class="gp">... </span>    <span class="sd">&quot;&quot;&quot;Do nothing, but document it.</span>
639
 
<span class="gp">...</span><span class="sd"></span>
640
 
<span class="gp">... </span><span class="sd">    No, really, it doesn&#39;t do anything.</span>
641
 
<span class="gp">... </span><span class="sd">    &quot;&quot;&quot;</span>
642
 
<span class="gp">... </span>    <span class="k">pass</span>
643
 
<span class="gp">...</span>
644
 
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">my_function</span><span class="o">.</span><span class="n">__doc__</span><span class="p">)</span>
645
 
<span class="go">Do nothing, but document it.</span>
646
 
 
647
 
<span class="go">    No, really, it doesn&#39;t do anything.</span>
648
 
</pre></div>
649
 
</div>
650
 
</div>
651
 
<div class="section" id="function-annotations">
652
 
<span id="tut-annotations"></span><h3>4.7.7. Function Annotations<a class="headerlink" href="#function-annotations" title="Permalink to this headline">¶</a></h3>
653
 
<p id="index-5"><a class="reference internal" href="../reference/compound_stmts.html#function"><span>Function annotations</span></a> are completely optional metadata
654
 
information about the types used by user-defined functions (see <span class="target" id="index-6"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0484"><strong>PEP 484</strong></a>
655
 
for more information).</p>
656
 
<p>Annotations are stored in the <code class="xref py py-attr docutils literal"><span class="pre">__annotations__</span></code> attribute of the function
657
 
as a dictionary and have no effect on any other part of the function.  Parameter
658
 
annotations are defined by a colon after the parameter name, followed by an
659
 
expression evaluating to the value of the annotation.  Return annotations are
660
 
defined by a literal <code class="docutils literal"><span class="pre">-&gt;</span></code>, followed by an expression, between the parameter
661
 
list and the colon denoting the end of the <a class="reference internal" href="../reference/compound_stmts.html#def"><code class="xref std std-keyword docutils literal"><span class="pre">def</span></code></a> statement.  The
662
 
following example has a positional argument, a keyword argument, and the return
663
 
value annotated:</p>
664
 
<div class="highlight-python3"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">ham</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">eggs</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;eggs&#39;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
665
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Annotations:&quot;</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">__annotations__</span><span class="p">)</span>
666
 
<span class="gp">... </span>    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Arguments:&quot;</span><span class="p">,</span> <span class="n">ham</span><span class="p">,</span> <span class="n">eggs</span><span class="p">)</span>
667
 
<span class="gp">... </span>    <span class="k">return</span> <span class="n">ham</span> <span class="o">+</span> <span class="s1">&#39; and &#39;</span> <span class="o">+</span> <span class="n">eggs</span>
668
 
<span class="gp">...</span>
669
 
<span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">(</span><span class="s1">&#39;spam&#39;</span><span class="p">)</span>
670
 
<span class="go">Annotations: {&#39;ham&#39;: &lt;class &#39;str&#39;&gt;, &#39;return&#39;: &lt;class &#39;str&#39;&gt;, &#39;eggs&#39;: &lt;class &#39;str&#39;&gt;}</span>
671
 
<span class="go">Arguments: spam eggs</span>
672
 
<span class="go">&#39;spam and eggs&#39;</span>
673
 
</pre></div>
674
 
</div>
675
 
</div>
676
 
</div>
677
 
<div class="section" id="intermezzo-coding-style">
678
 
<span id="tut-codingstyle"></span><h2>4.8. Intermezzo: Coding Style<a class="headerlink" href="#intermezzo-coding-style" title="Permalink to this headline">¶</a></h2>
679
 
<p id="index-7">Now that you are about to write longer, more complex pieces of Python, it is a
680
 
good time to talk about <em>coding style</em>.  Most languages can be written (or more
681
 
concise, <em>formatted</em>) in different styles; some are more readable than others.
682
 
Making it easy for others to read your code is always a good idea, and adopting
683
 
a nice coding style helps tremendously for that.</p>
684
 
<p>For Python, <span class="target" id="index-8"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0008"><strong>PEP 8</strong></a> has emerged as the style guide that most projects adhere to;
685
 
it promotes a very readable and eye-pleasing coding style.  Every Python
686
 
developer should read it at some point; here are the most important points
687
 
extracted for you:</p>
688
 
<ul>
689
 
<li><p class="first">Use 4-space indentation, and no tabs.</p>
690
 
<p>4 spaces are a good compromise between small indentation (allows greater
691
 
nesting depth) and large indentation (easier to read).  Tabs introduce
692
 
confusion, and are best left out.</p>
693
 
</li>
694
 
<li><p class="first">Wrap lines so that they don&#8217;t exceed 79 characters.</p>
695
 
<p>This helps users with small displays and makes it possible to have several
696
 
code files side-by-side on larger displays.</p>
697
 
</li>
698
 
<li><p class="first">Use blank lines to separate functions and classes, and larger blocks of
699
 
code inside functions.</p>
700
 
</li>
701
 
<li><p class="first">When possible, put comments on a line of their own.</p>
702
 
</li>
703
 
<li><p class="first">Use docstrings.</p>
704
 
</li>
705
 
<li><p class="first">Use spaces around operators and after commas, but not directly inside
706
 
bracketing constructs: <code class="docutils literal"><span class="pre">a</span> <span class="pre">=</span> <span class="pre">f(1,</span> <span class="pre">2)</span> <span class="pre">+</span> <span class="pre">g(3,</span> <span class="pre">4)</span></code>.</p>
707
 
</li>
708
 
<li><p class="first">Name your classes and functions consistently; the convention is to use
709
 
<code class="docutils literal"><span class="pre">CamelCase</span></code> for classes and <code class="docutils literal"><span class="pre">lower_case_with_underscores</span></code> for functions
710
 
and methods.  Always use <code class="docutils literal"><span class="pre">self</span></code> as the name for the first method argument
711
 
(see <a class="reference internal" href="classes.html#tut-firstclasses"><span>A First Look at Classes</span></a> for more on classes and methods).</p>
712
 
</li>
713
 
<li><p class="first">Don&#8217;t use fancy encodings if your code is meant to be used in international
714
 
environments.  Python&#8217;s default, UTF-8, or even plain ASCII work best in any
715
 
case.</p>
716
 
</li>
717
 
<li><p class="first">Likewise, don&#8217;t use non-ASCII characters in identifiers if there is only the
718
 
slightest chance people speaking a different language will read or maintain
719
 
the code.</p>
720
 
</li>
721
 
</ul>
722
 
<p class="rubric">Footnotes</p>
723
 
<table class="docutils footnote" frame="void" id="id2" rules="none">
724
 
<colgroup><col class="label" /><col /></colgroup>
725
 
<tbody valign="top">
726
 
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Actually, <em>call by object reference</em> would be a better description,
727
 
since if a mutable object is passed, the caller will see any changes the
728
 
callee makes to it (items inserted into a list).</td></tr>
729
 
</tbody>
730
 
</table>
731
 
</div>
732
 
</div>
733
 
 
734
 
 
735
 
          </div>
736
 
        </div>
737
 
      </div>
738
 
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
739
 
        <div class="sphinxsidebarwrapper">
740
 
  <h3><a href="../contents.html">Table Of Contents</a></h3>
741
 
  <ul>
742
 
<li><a class="reference internal" href="#">4. More Control Flow Tools</a><ul>
743
 
<li><a class="reference internal" href="#if-statements">4.1. <code class="docutils literal"><span class="pre">if</span></code> Statements</a></li>
744
 
<li><a class="reference internal" href="#for-statements">4.2. <code class="docutils literal"><span class="pre">for</span></code> Statements</a></li>
745
 
<li><a class="reference internal" href="#the-range-function">4.3. The <code class="docutils literal"><span class="pre">range()</span></code> Function</a></li>
746
 
<li><a class="reference internal" href="#break-and-continue-statements-and-else-clauses-on-loops">4.4. <code class="docutils literal"><span class="pre">break</span></code> and <code class="docutils literal"><span class="pre">continue</span></code> Statements, and <code class="docutils literal"><span class="pre">else</span></code> Clauses on Loops</a></li>
747
 
<li><a class="reference internal" href="#pass-statements">4.5. <code class="docutils literal"><span class="pre">pass</span></code> Statements</a></li>
748
 
<li><a class="reference internal" href="#defining-functions">4.6. Defining Functions</a></li>
749
 
<li><a class="reference internal" href="#more-on-defining-functions">4.7. More on Defining Functions</a><ul>
750
 
<li><a class="reference internal" href="#default-argument-values">4.7.1. Default Argument Values</a></li>
751
 
<li><a class="reference internal" href="#keyword-arguments">4.7.2. Keyword Arguments</a></li>
752
 
<li><a class="reference internal" href="#arbitrary-argument-lists">4.7.3. Arbitrary Argument Lists</a></li>
753
 
<li><a class="reference internal" href="#unpacking-argument-lists">4.7.4. Unpacking Argument Lists</a></li>
754
 
<li><a class="reference internal" href="#lambda-expressions">4.7.5. Lambda Expressions</a></li>
755
 
<li><a class="reference internal" href="#documentation-strings">4.7.6. Documentation Strings</a></li>
756
 
<li><a class="reference internal" href="#function-annotations">4.7.7. Function Annotations</a></li>
757
 
</ul>
758
 
</li>
759
 
<li><a class="reference internal" href="#intermezzo-coding-style">4.8. Intermezzo: Coding Style</a></li>
760
 
</ul>
761
 
</li>
762
 
</ul>
763
 
 
764
 
  <h4>Previous topic</h4>
765
 
  <p class="topless"><a href="introduction.html"
766
 
                        title="previous chapter">3. An Informal Introduction to Python</a></p>
767
 
  <h4>Next topic</h4>
768
 
  <p class="topless"><a href="datastructures.html"
769
 
                        title="next chapter">5. Data Structures</a></p>
770
 
<h3>This Page</h3>
771
 
<ul class="this-page-menu">
772
 
  <li><a href="../bugs.html">Report a Bug</a></li>
773
 
  <li><a href="../_sources/tutorial/controlflow.txt"
774
 
         rel="nofollow">Show Source</a></li>
775
 
</ul>
776
 
 
777
 
<div id="searchbox" style="display: none" role="search">
778
 
  <h3>Quick search</h3>
779
 
    <form class="search" action="../search.html" method="get">
780
 
      <input type="text" name="q" />
781
 
      <input type="submit" value="Go" />
782
 
      <input type="hidden" name="check_keywords" value="yes" />
783
 
      <input type="hidden" name="area" value="default" />
784
 
    </form>
785
 
    <p class="searchtip" style="font-size: 90%">
786
 
    Enter search terms or a module, class or function name.
787
 
    </p>
788
 
</div>
789
 
<script type="text/javascript">$('#searchbox').show(0);</script>
790
 
        </div>
791
 
      </div>
792
 
      <div class="clearer"></div>
793
 
    </div>  
794
 
    <div class="related" role="navigation" aria-label="related navigation">
795
 
      <h3>Navigation</h3>
796
 
      <ul>
797
 
        <li class="right" style="margin-right: 10px">
798
 
          <a href="../genindex.html" title="General Index"
799
 
             >index</a></li>
800
 
        <li class="right" >
801
 
          <a href="../py-modindex.html" title="Python Module Index"
802
 
             >modules</a> |</li>
803
 
        <li class="right" >
804
 
          <a href="datastructures.html" title="5. Data Structures"
805
 
             >next</a> |</li>
806
 
        <li class="right" >
807
 
          <a href="introduction.html" title="3. An Informal Introduction to Python"
808
 
             >previous</a> |</li>
809
 
        <li><img src="../_static/py.png" alt=""
810
 
                 style="vertical-align: middle; margin-top: -1px"/></li>
811
 
        <li><a href="https://www.python.org/">Python</a> &raquo;</li>
812
 
        <li>
813
 
          <span class="version_switcher_placeholder">3.5.1</span>
814
 
          <a href="../index.html">Documentation </a> &raquo;
815
 
        </li>
816
 
 
817
 
          <li class="nav-item nav-item-1"><a href="index.html" >The Python Tutorial</a> &raquo;</li> 
818
 
      </ul>
819
 
    </div>  
820
 
    <div class="footer">
821
 
    &copy; <a href="../copyright.html">Copyright</a> 1990-2016, Python Software Foundation.
822
 
    <br />
823
 
    The Python Software Foundation is a non-profit corporation.
824
 
    <a href="https://www.python.org/psf/donations/">Please donate.</a>
825
 
    <br />
826
 
    Last updated on Jan 22, 2016.
827
 
    <a href="../bugs.html">Found a bug</a>?
828
 
    <br />
829
 
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.3.3.
830
 
    </div>
831
 
 
832
 
  </body>
833
 
</html>
 
 
b'\\ No newline at end of file'