gooderp18绿色标准版
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1365 行
131KB

  1. <!DOCTYPE html>
  2. <html lang="en" data-content_root="../">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <meta property="og:title" content="4. More Control Flow Tools" />
  7. <meta property="og:type" content="website" />
  8. <meta property="og:url" content="https://docs.python.org/3/tutorial/controlflow.html" />
  9. <meta property="og:site_name" content="Python documentation" />
  10. <meta property="og:description" content="As well as the while statement just introduced, Python uses a few more that we will encounter in this chapter. if Statements: Perhaps the most well-known statement type is the if statement. For exa..." />
  11. <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
  12. <meta property="og:image:alt" content="Python documentation" />
  13. <meta name="description" content="As well as the while statement just introduced, Python uses a few more that we will encounter in this chapter. if Statements: Perhaps the most well-known statement type is the if statement. For exa..." />
  14. <meta property="og:image:width" content="200" />
  15. <meta property="og:image:height" content="200" />
  16. <meta name="theme-color" content="#3776ab" />
  17. <title>4. More Control Flow Tools &#8212; Python 3.12.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
  18. <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" />
  19. <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=bb723527" />
  20. <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=b20cc3f5" />
  21. <script src="../_static/documentation_options.js?v=2c828074"></script>
  22. <script src="../_static/doctools.js?v=888ff710"></script>
  23. <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
  24. <script src="../_static/sidebar.js"></script>
  25. <link rel="search" type="application/opensearchdescription+xml"
  26. title="Search within Python 3.12.3 documentation"
  27. href="../_static/opensearch.xml"/>
  28. <link rel="author" title="About these documents" href="../about.html" />
  29. <link rel="index" title="Index" href="../genindex.html" />
  30. <link rel="search" title="Search" href="../search.html" />
  31. <link rel="copyright" title="Copyright" href="../copyright.html" />
  32. <link rel="next" title="5. Data Structures" href="datastructures.html" />
  33. <link rel="prev" title="3. An Informal Introduction to Python" href="introduction.html" />
  34. <link rel="canonical" href="https://docs.python.org/3/tutorial/controlflow.html" />
  35. <style>
  36. @media only screen {
  37. table.full-width-table {
  38. width: 100%;
  39. }
  40. }
  41. </style>
  42. <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
  43. <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
  44. <script type="text/javascript" src="../_static/copybutton.js"></script>
  45. <script type="text/javascript" src="../_static/menu.js"></script>
  46. <script type="text/javascript" src="../_static/search-focus.js"></script>
  47. <script type="text/javascript" src="../_static/themetoggle.js"></script>
  48. </head>
  49. <body>
  50. <div class="mobile-nav">
  51. <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
  52. aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
  53. <nav class="nav-content" role="navigation">
  54. <label for="menuToggler" class="toggler__label">
  55. <span></span>
  56. </label>
  57. <span class="nav-items-wrapper">
  58. <a href="https://www.python.org/" class="nav-logo">
  59. <img src="../_static/py.svg" alt="Python logo"/>
  60. </a>
  61. <span class="version_switcher_placeholder"></span>
  62. <form role="search" class="search" action="../search.html" method="get">
  63. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
  64. <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
  65. </svg>
  66. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  67. <input type="submit" value="Go"/>
  68. </form>
  69. </span>
  70. </nav>
  71. <div class="menu-wrapper">
  72. <nav class="menu" role="navigation" aria-label="main navigation">
  73. <div class="language_switcher_placeholder"></div>
  74. <label class="theme-selector-label">
  75. Theme
  76. <select class="theme-selector" oninput="activateTheme(this.value)">
  77. <option value="auto" selected>Auto</option>
  78. <option value="light">Light</option>
  79. <option value="dark">Dark</option>
  80. </select>
  81. </label>
  82. <div>
  83. <h3><a href="../contents.html">Table of Contents</a></h3>
  84. <ul>
  85. <li><a class="reference internal" href="#">4. More Control Flow Tools</a><ul>
  86. <li><a class="reference internal" href="#if-statements">4.1. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">if</span></code> Statements</a></li>
  87. <li><a class="reference internal" href="#for-statements">4.2. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> Statements</a></li>
  88. <li><a class="reference internal" href="#the-range-function">4.3. The <code class="xref py py-func docutils literal notranslate"><span class="pre">range()</span></code> Function</a></li>
  89. <li><a class="reference internal" href="#break-and-continue-statements-and-else-clauses-on-loops">4.4. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">break</span></code> and <code class="xref std std-keyword docutils literal notranslate"><span class="pre">continue</span></code> Statements, and <code class="xref std std-keyword docutils literal notranslate"><span class="pre">else</span></code> Clauses on Loops</a></li>
  90. <li><a class="reference internal" href="#pass-statements">4.5. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">pass</span></code> Statements</a></li>
  91. <li><a class="reference internal" href="#match-statements">4.6. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code> Statements</a></li>
  92. <li><a class="reference internal" href="#defining-functions">4.7. Defining Functions</a></li>
  93. <li><a class="reference internal" href="#more-on-defining-functions">4.8. More on Defining Functions</a><ul>
  94. <li><a class="reference internal" href="#default-argument-values">4.8.1. Default Argument Values</a></li>
  95. <li><a class="reference internal" href="#keyword-arguments">4.8.2. Keyword Arguments</a></li>
  96. <li><a class="reference internal" href="#special-parameters">4.8.3. Special parameters</a><ul>
  97. <li><a class="reference internal" href="#positional-or-keyword-arguments">4.8.3.1. Positional-or-Keyword Arguments</a></li>
  98. <li><a class="reference internal" href="#positional-only-parameters">4.8.3.2. Positional-Only Parameters</a></li>
  99. <li><a class="reference internal" href="#keyword-only-arguments">4.8.3.3. Keyword-Only Arguments</a></li>
  100. <li><a class="reference internal" href="#function-examples">4.8.3.4. Function Examples</a></li>
  101. <li><a class="reference internal" href="#recap">4.8.3.5. Recap</a></li>
  102. </ul>
  103. </li>
  104. <li><a class="reference internal" href="#arbitrary-argument-lists">4.8.4. Arbitrary Argument Lists</a></li>
  105. <li><a class="reference internal" href="#unpacking-argument-lists">4.8.5. Unpacking Argument Lists</a></li>
  106. <li><a class="reference internal" href="#lambda-expressions">4.8.6. Lambda Expressions</a></li>
  107. <li><a class="reference internal" href="#documentation-strings">4.8.7. Documentation Strings</a></li>
  108. <li><a class="reference internal" href="#function-annotations">4.8.8. Function Annotations</a></li>
  109. </ul>
  110. </li>
  111. <li><a class="reference internal" href="#intermezzo-coding-style">4.9. Intermezzo: Coding Style</a></li>
  112. </ul>
  113. </li>
  114. </ul>
  115. </div>
  116. <div>
  117. <h4>Previous topic</h4>
  118. <p class="topless"><a href="introduction.html"
  119. title="previous chapter"><span class="section-number">3. </span>An Informal Introduction to Python</a></p>
  120. </div>
  121. <div>
  122. <h4>Next topic</h4>
  123. <p class="topless"><a href="datastructures.html"
  124. title="next chapter"><span class="section-number">5. </span>Data Structures</a></p>
  125. </div>
  126. <div role="note" aria-label="source link">
  127. <h3>This Page</h3>
  128. <ul class="this-page-menu">
  129. <li><a href="../bugs.html">Report a Bug</a></li>
  130. <li>
  131. <a href="https://github.com/python/cpython/blob/main/Doc/tutorial/controlflow.rst"
  132. rel="nofollow">Show Source
  133. </a>
  134. </li>
  135. </ul>
  136. </div>
  137. </nav>
  138. </div>
  139. </div>
  140. <div class="related" role="navigation" aria-label="related navigation">
  141. <h3>Navigation</h3>
  142. <ul>
  143. <li class="right" style="margin-right: 10px">
  144. <a href="../genindex.html" title="General Index"
  145. accesskey="I">index</a></li>
  146. <li class="right" >
  147. <a href="../py-modindex.html" title="Python Module Index"
  148. >modules</a> |</li>
  149. <li class="right" >
  150. <a href="datastructures.html" title="5. Data Structures"
  151. accesskey="N">next</a> |</li>
  152. <li class="right" >
  153. <a href="introduction.html" title="3. An Informal Introduction to Python"
  154. accesskey="P">previous</a> |</li>
  155. <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  156. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  157. <li class="switchers">
  158. <div class="language_switcher_placeholder"></div>
  159. <div class="version_switcher_placeholder"></div>
  160. </li>
  161. <li>
  162. </li>
  163. <li id="cpython-language-and-version">
  164. <a href="../index.html">3.12.3 Documentation</a> &#187;
  165. </li>
  166. <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">The Python Tutorial</a> &#187;</li>
  167. <li class="nav-item nav-item-this"><a href=""><span class="section-number">4. </span>More Control Flow Tools</a></li>
  168. <li class="right">
  169. <div class="inline-search" role="search">
  170. <form class="inline-search" action="../search.html" method="get">
  171. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
  172. <input type="submit" value="Go" />
  173. </form>
  174. </div>
  175. |
  176. </li>
  177. <li class="right">
  178. <label class="theme-selector-label">
  179. Theme
  180. <select class="theme-selector" oninput="activateTheme(this.value)">
  181. <option value="auto" selected>Auto</option>
  182. <option value="light">Light</option>
  183. <option value="dark">Dark</option>
  184. </select>
  185. </label> |</li>
  186. </ul>
  187. </div>
  188. <div class="document">
  189. <div class="documentwrapper">
  190. <div class="bodywrapper">
  191. <div class="body" role="main">
  192. <section id="more-control-flow-tools">
  193. <span id="tut-morecontrol"></span><h1><span class="section-number">4. </span>More Control Flow Tools<a class="headerlink" href="#more-control-flow-tools" title="Link to this heading">¶</a></h1>
  194. <p>As well as the <a class="reference internal" href="../reference/compound_stmts.html#while"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">while</span></code></a> statement just introduced, Python uses a few more
  195. that we will encounter in this chapter.</p>
  196. <section id="if-statements">
  197. <span id="tut-if"></span><h2><span class="section-number">4.1. </span><code class="xref std std-keyword docutils literal notranslate"><span class="pre">if</span></code> Statements<a class="headerlink" href="#if-statements" title="Link to this heading">¶</a></h2>
  198. <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 notranslate"><span class="pre">if</span></code></a> statement. For
  199. example:</p>
  200. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  201. <span class="go">Please enter an integer: 42</span>
  202. <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>
  203. <span class="gp">... </span> <span class="n">x</span> <span class="o">=</span> <span class="mi">0</span>
  204. <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>
  205. <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>
  206. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Zero&#39;</span><span class="p">)</span>
  207. <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>
  208. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Single&#39;</span><span class="p">)</span>
  209. <span class="gp">... </span><span class="k">else</span><span class="p">:</span>
  210. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;More&#39;</span><span class="p">)</span>
  211. <span class="gp">...</span>
  212. <span class="go">More</span>
  213. </pre></div>
  214. </div>
  215. <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 notranslate"><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 notranslate"><span class="pre">else</span></code></a> part is
  216. optional. The keyword ‘<code class="xref std std-keyword docutils literal notranslate"><span class="pre">elif</span></code>’ is short for ‘else if’, and is useful
  217. to avoid excessive indentation. An <code class="xref std std-keyword docutils literal notranslate"><span class="pre">if</span></code> … <code class="xref std std-keyword docutils literal notranslate"><span class="pre">elif</span></code> …
  218. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">elif</span></code> … sequence is a substitute for the <code class="docutils literal notranslate"><span class="pre">switch</span></code> or
  219. <code class="docutils literal notranslate"><span class="pre">case</span></code> statements found in other languages.</p>
  220. <p>If you’re comparing the same value to several constants, or checking for specific types or
  221. attributes, you may also find the <code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code> statement useful. For more
  222. details see <a class="reference internal" href="#tut-match"><span class="std std-ref">match Statements</span></a>.</p>
  223. </section>
  224. <section id="for-statements">
  225. <span id="tut-for"></span><h2><span class="section-number">4.2. </span><code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> Statements<a class="headerlink" href="#for-statements" title="Link to this heading">¶</a></h2>
  226. <p id="index-0">The <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code></a> statement in Python differs a bit from what you may be used
  227. to in C or Pascal. Rather than always iterating over an arithmetic progression
  228. of numbers (like in Pascal), or giving the user the ability to define both the
  229. iteration step and halting condition (as C), Python’s <code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> statement
  230. iterates over the items of any sequence (a list or a string), in the order that
  231. they appear in the sequence. For example (no pun intended):</p>
  232. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="c1"># Measure some strings:</span>
  233. <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>
  234. <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>
  235. <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>
  236. <span class="gp">...</span>
  237. <span class="go">cat 3</span>
  238. <span class="go">window 6</span>
  239. <span class="go">defenestrate 12</span>
  240. </pre></div>
  241. </div>
  242. <p>Code that modifies a collection while iterating over that same collection can
  243. be tricky to get right. Instead, it is usually more straight-forward to loop
  244. over a copy of the collection or to create a new collection:</p>
  245. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># Create a sample collection</span>
  246. <span class="n">users</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;Hans&#39;</span><span class="p">:</span> <span class="s1">&#39;active&#39;</span><span class="p">,</span> <span class="s1">&#39;Éléonore&#39;</span><span class="p">:</span> <span class="s1">&#39;inactive&#39;</span><span class="p">,</span> <span class="s1">&#39;景太郎&#39;</span><span class="p">:</span> <span class="s1">&#39;active&#39;</span><span class="p">}</span>
  247. <span class="c1"># Strategy: Iterate over a copy</span>
  248. <span class="k">for</span> <span class="n">user</span><span class="p">,</span> <span class="n">status</span> <span class="ow">in</span> <span class="n">users</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
  249. <span class="k">if</span> <span class="n">status</span> <span class="o">==</span> <span class="s1">&#39;inactive&#39;</span><span class="p">:</span>
  250. <span class="k">del</span> <span class="n">users</span><span class="p">[</span><span class="n">user</span><span class="p">]</span>
  251. <span class="c1"># Strategy: Create a new collection</span>
  252. <span class="n">active_users</span> <span class="o">=</span> <span class="p">{}</span>
  253. <span class="k">for</span> <span class="n">user</span><span class="p">,</span> <span class="n">status</span> <span class="ow">in</span> <span class="n">users</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
  254. <span class="k">if</span> <span class="n">status</span> <span class="o">==</span> <span class="s1">&#39;active&#39;</span><span class="p">:</span>
  255. <span class="n">active_users</span><span class="p">[</span><span class="n">user</span><span class="p">]</span> <span class="o">=</span> <span class="n">status</span>
  256. </pre></div>
  257. </div>
  258. </section>
  259. <section id="the-range-function">
  260. <span id="tut-range"></span><h2><span class="section-number">4.3. </span>The <a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal notranslate"><span class="pre">range()</span></code></a> Function<a class="headerlink" href="#the-range-function" title="Link to this heading">¶</a></h2>
  261. <p>If you do need to iterate over a sequence of numbers, the built-in function
  262. <a class="reference internal" href="../library/stdtypes.html#range" title="range"><code class="xref py py-func docutils literal notranslate"><span class="pre">range()</span></code></a> comes in handy. It generates arithmetic progressions:</p>
  263. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  264. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
  265. <span class="gp">...</span>
  266. <span class="go">0</span>
  267. <span class="go">1</span>
  268. <span class="go">2</span>
  269. <span class="go">3</span>
  270. <span class="go">4</span>
  271. </pre></div>
  272. </div>
  273. <p>The given end point is never part of the generated sequence; <code class="docutils literal notranslate"><span class="pre">range(10)</span></code> generates
  274. 10 values, the legal indices for items of a sequence of length 10. It
  275. is possible to let the range start at another number, or to specify a different
  276. increment (even negative; sometimes this is called the ‘step’):</p>
  277. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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> <span class="mi">10</span><span class="p">))</span>
  278. <span class="go">[5, 6, 7, 8, 9]</span>
  279. <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">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">3</span><span class="p">))</span>
  280. <span class="go">[0, 3, 6, 9]</span>
  281. <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="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>
  282. <span class="go">[-10, -40, -70]</span>
  283. </pre></div>
  284. </div>
  285. <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 notranslate"><span class="pre">range()</span></code></a> and
  286. <a class="reference internal" href="../library/functions.html#len" title="len"><code class="xref py py-func docutils literal notranslate"><span class="pre">len()</span></code></a> as follows:</p>
  287. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  288. <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>
  289. <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>
  290. <span class="gp">...</span>
  291. <span class="go">0 Mary</span>
  292. <span class="go">1 had</span>
  293. <span class="go">2 a</span>
  294. <span class="go">3 little</span>
  295. <span class="go">4 lamb</span>
  296. </pre></div>
  297. </div>
  298. <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 notranslate"><span class="pre">enumerate()</span></code></a>
  299. function, see <a class="reference internal" href="datastructures.html#tut-loopidioms"><span class="std std-ref">Looping Techniques</span></a>.</p>
  300. <p>A strange thing happens if you just print a range:</p>
  301. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
  302. <span class="go">range(0, 10)</span>
  303. </pre></div>
  304. </div>
  305. <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 notranslate"><span class="pre">range()</span></code></a> behaves as if it is a list,
  306. but in fact it isn’t. It is an object which returns the successive items of
  307. the desired sequence when you iterate over it, but it doesn’t really make
  308. the list, thus saving space.</p>
  309. <p>We say such an object is <a class="reference internal" href="../glossary.html#term-iterable"><span class="xref std std-term">iterable</span></a>, that is, suitable as a target for
  310. functions and constructs that expect something from which they can
  311. obtain successive items until the supply is exhausted. We have seen that
  312. the <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code></a> statement is such a construct, while an example of a function
  313. that takes an iterable is <a class="reference internal" href="../library/functions.html#sum" title="sum"><code class="xref py py-func docutils literal notranslate"><span class="pre">sum()</span></code></a>:</p>
  314. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="nb">sum</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">))</span> <span class="c1"># 0 + 1 + 2 + 3</span>
  315. <span class="go">6</span>
  316. </pre></div>
  317. </div>
  318. <p>Later we will see more functions that return iterables and take iterables as
  319. arguments. In chapter <a class="reference internal" href="datastructures.html#tut-structures"><span class="std std-ref">Data Structures</span></a>, we will discuss in more detail about
  320. <a class="reference internal" href="../library/stdtypes.html#list" title="list"><code class="xref py py-func docutils literal notranslate"><span class="pre">list()</span></code></a>.</p>
  321. </section>
  322. <section id="break-and-continue-statements-and-else-clauses-on-loops">
  323. <span id="tut-break"></span><h2><span class="section-number">4.4. </span><code class="xref std std-keyword docutils literal notranslate"><span class="pre">break</span></code> and <code class="xref std std-keyword docutils literal notranslate"><span class="pre">continue</span></code> Statements, and <code class="xref std std-keyword docutils literal notranslate"><span class="pre">else</span></code> Clauses on Loops<a class="headerlink" href="#break-and-continue-statements-and-else-clauses-on-loops" title="Link to this heading">¶</a></h2>
  324. <p>The <a class="reference internal" href="../reference/simple_stmts.html#break"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">break</span></code></a> statement breaks out of the innermost enclosing
  325. <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal notranslate"><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 notranslate"><span class="pre">while</span></code></a> loop.</p>
  326. <p>A <code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> or <code class="xref std std-keyword docutils literal notranslate"><span class="pre">while</span></code> loop can include an <code class="xref std std-keyword docutils literal notranslate"><span class="pre">else</span></code> clause.</p>
  327. <p>In a <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code></a> loop, the <code class="xref std std-keyword docutils literal notranslate"><span class="pre">else</span></code> clause is executed
  328. after the loop reaches its final iteration.</p>
  329. <p>In a <a class="reference internal" href="../reference/compound_stmts.html#while"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">while</span></code></a> loop, it’s executed after the loop’s condition becomes false.</p>
  330. <p>In either kind of loop, the <code class="xref std std-keyword docutils literal notranslate"><span class="pre">else</span></code> clause is <strong>not</strong> executed
  331. if the loop was terminated by a <a class="reference internal" href="../reference/simple_stmts.html#break"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">break</span></code></a>.</p>
  332. <p>This is exemplified in the following <code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> loop,
  333. which searches for prime numbers:</p>
  334. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  335. <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>
  336. <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>
  337. <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>
  338. <span class="gp">... </span> <span class="k">break</span>
  339. <span class="gp">... </span> <span class="k">else</span><span class="p">:</span>
  340. <span class="gp">... </span> <span class="c1"># loop fell through without finding a factor</span>
  341. <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>
  342. <span class="gp">...</span>
  343. <span class="go">2 is a prime number</span>
  344. <span class="go">3 is a prime number</span>
  345. <span class="go">4 equals 2 * 2</span>
  346. <span class="go">5 is a prime number</span>
  347. <span class="go">6 equals 2 * 3</span>
  348. <span class="go">7 is a prime number</span>
  349. <span class="go">8 equals 2 * 4</span>
  350. <span class="go">9 equals 3 * 3</span>
  351. </pre></div>
  352. </div>
  353. <p>(Yes, this is the correct code. Look closely: the <code class="docutils literal notranslate"><span class="pre">else</span></code> clause belongs to
  354. the <a class="reference internal" href="../reference/compound_stmts.html#for"><code class="xref std std-keyword docutils literal notranslate"><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 notranslate"><span class="pre">if</span></code></a> statement.)</p>
  355. <p>When used with a loop, the <code class="docutils literal notranslate"><span class="pre">else</span></code> clause has more in common with the
  356. <code class="docutils literal notranslate"><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 notranslate"><span class="pre">try</span></code></a> statement than it does with that of
  357. <a class="reference internal" href="../reference/compound_stmts.html#if"><code class="xref std std-keyword docutils literal notranslate"><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 notranslate"><span class="pre">try</span></code></a> statement’s <code class="docutils literal notranslate"><span class="pre">else</span></code> clause runs
  358. when no exception occurs, and a loop’s <code class="docutils literal notranslate"><span class="pre">else</span></code> clause runs when no <code class="docutils literal notranslate"><span class="pre">break</span></code>
  359. occurs. For more on the <code class="xref std std-keyword docutils literal notranslate"><span class="pre">try</span></code> statement and exceptions, see
  360. <a class="reference internal" href="errors.html#tut-handling"><span class="std std-ref">Handling Exceptions</span></a>.</p>
  361. <p>The <a class="reference internal" href="../reference/simple_stmts.html#continue"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">continue</span></code></a> statement, also borrowed from C, continues with the next
  362. iteration of the loop:</p>
  363. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  364. <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>
  365. <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>
  366. <span class="gp">... </span> <span class="k">continue</span>
  367. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Found an odd number&quot;</span><span class="p">,</span> <span class="n">num</span><span class="p">)</span>
  368. <span class="gp">...</span>
  369. <span class="go">Found an even number 2</span>
  370. <span class="go">Found an odd number 3</span>
  371. <span class="go">Found an even number 4</span>
  372. <span class="go">Found an odd number 5</span>
  373. <span class="go">Found an even number 6</span>
  374. <span class="go">Found an odd number 7</span>
  375. <span class="go">Found an even number 8</span>
  376. <span class="go">Found an odd number 9</span>
  377. </pre></div>
  378. </div>
  379. </section>
  380. <section id="pass-statements">
  381. <span id="tut-pass"></span><h2><span class="section-number">4.5. </span><code class="xref std std-keyword docutils literal notranslate"><span class="pre">pass</span></code> Statements<a class="headerlink" href="#pass-statements" title="Link to this heading">¶</a></h2>
  382. <p>The <a class="reference internal" href="../reference/simple_stmts.html#pass"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">pass</span></code></a> statement does nothing. It can be used when a statement is
  383. required syntactically but the program requires no action. For example:</p>
  384. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
  385. <span class="gp">... </span> <span class="k">pass</span> <span class="c1"># Busy-wait for keyboard interrupt (Ctrl+C)</span>
  386. <span class="gp">...</span>
  387. </pre></div>
  388. </div>
  389. <p>This is commonly used for creating minimal classes:</p>
  390. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">class</span> <span class="nc">MyEmptyClass</span><span class="p">:</span>
  391. <span class="gp">... </span> <span class="k">pass</span>
  392. <span class="gp">...</span>
  393. </pre></div>
  394. </div>
  395. <p>Another place <a class="reference internal" href="../reference/simple_stmts.html#pass"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">pass</span></code></a> can be used is as a place-holder for a function or
  396. conditional body when you are working on new code, allowing you to keep thinking
  397. at a more abstract level. The <code class="xref std std-keyword docutils literal notranslate"><span class="pre">pass</span></code> is silently ignored:</p>
  398. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  399. <span class="gp">... </span> <span class="k">pass</span> <span class="c1"># Remember to implement this!</span>
  400. <span class="gp">...</span>
  401. </pre></div>
  402. </div>
  403. </section>
  404. <section id="match-statements">
  405. <span id="tut-match"></span><h2><span class="section-number">4.6. </span><code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code> Statements<a class="headerlink" href="#match-statements" title="Link to this heading">¶</a></h2>
  406. <p>A <a class="reference internal" href="../reference/compound_stmts.html#match"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code></a> statement takes an expression and compares its value to successive
  407. patterns given as one or more case blocks. This is superficially
  408. similar to a switch statement in C, Java or JavaScript (and many
  409. other languages), but it’s more similar to pattern matching in
  410. languages like Rust or Haskell. Only the first pattern that matches
  411. gets executed and it can also extract components (sequence elements
  412. or object attributes) from the value into variables.</p>
  413. <p>The simplest form compares a subject value against one or more literals:</p>
  414. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">http_error</span><span class="p">(</span><span class="n">status</span><span class="p">):</span>
  415. <span class="k">match</span> <span class="n">status</span><span class="p">:</span>
  416. <span class="k">case</span> <span class="mi">400</span><span class="p">:</span>
  417. <span class="k">return</span> <span class="s2">&quot;Bad request&quot;</span>
  418. <span class="k">case</span> <span class="mi">404</span><span class="p">:</span>
  419. <span class="k">return</span> <span class="s2">&quot;Not found&quot;</span>
  420. <span class="k">case</span> <span class="mi">418</span><span class="p">:</span>
  421. <span class="k">return</span> <span class="s2">&quot;I&#39;m a teapot&quot;</span>
  422. <span class="k">case</span><span class="w"> </span><span class="k">_</span><span class="p">:</span>
  423. <span class="k">return</span> <span class="s2">&quot;Something&#39;s wrong with the internet&quot;</span>
  424. </pre></div>
  425. </div>
  426. <p>Note the last block: the “variable name” <code class="docutils literal notranslate"><span class="pre">_</span></code> acts as a <em>wildcard</em> and
  427. never fails to match. If no case matches, none of the branches is executed.</p>
  428. <p>You can combine several literals in a single pattern using <code class="docutils literal notranslate"><span class="pre">|</span></code> (“or”):</p>
  429. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">case</span> <span class="mi">401</span> <span class="o">|</span> <span class="mi">403</span> <span class="o">|</span> <span class="mi">404</span><span class="p">:</span>
  430. <span class="k">return</span> <span class="s2">&quot;Not allowed&quot;</span>
  431. </pre></div>
  432. </div>
  433. <p>Patterns can look like unpacking assignments, and can be used to bind
  434. variables:</p>
  435. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="c1"># point is an (x, y) tuple</span>
  436. <span class="k">match</span> <span class="n">point</span><span class="p">:</span>
  437. <span class="k">case</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
  438. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Origin&quot;</span><span class="p">)</span>
  439. <span class="k">case</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
  440. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Y=</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  441. <span class="k">case</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
  442. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;X=</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  443. <span class="k">case</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
  444. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;X=</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">, Y=</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  445. <span class="k">case</span><span class="w"> </span><span class="k">_</span><span class="p">:</span>
  446. <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;Not a point&quot;</span><span class="p">)</span>
  447. </pre></div>
  448. </div>
  449. <p>Study that one carefully! The first pattern has two literals, and can
  450. be thought of as an extension of the literal pattern shown above. But
  451. the next two patterns combine a literal and a variable, and the
  452. variable <em>binds</em> a value from the subject (<code class="docutils literal notranslate"><span class="pre">point</span></code>). The fourth
  453. pattern captures two values, which makes it conceptually similar to
  454. the unpacking assignment <code class="docutils literal notranslate"><span class="pre">(x,</span> <span class="pre">y)</span> <span class="pre">=</span> <span class="pre">point</span></code>.</p>
  455. <p>If you are using classes to structure your data
  456. you can use the class name followed by an argument list resembling a
  457. constructor, but with the ability to capture attributes into variables:</p>
  458. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Point</span><span class="p">:</span>
  459. <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
  460. <span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
  461. <span class="bp">self</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
  462. <span class="k">def</span> <span class="nf">where_is</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
  463. <span class="k">match</span> <span class="n">point</span><span class="p">:</span>
  464. <span class="k">case</span> <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
  465. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Origin&quot;</span><span class="p">)</span>
  466. <span class="k">case</span> <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">y</span><span class="p">):</span>
  467. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Y=</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  468. <span class="k">case</span> <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
  469. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;X=</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  470. <span class="k">case</span> <span class="n">Point</span><span class="p">():</span>
  471. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Somewhere else&quot;</span><span class="p">)</span>
  472. <span class="k">case</span><span class="w"> </span><span class="k">_</span><span class="p">:</span>
  473. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Not a point&quot;</span><span class="p">)</span>
  474. </pre></div>
  475. </div>
  476. <p>You can use positional parameters with some builtin classes that provide an
  477. ordering for their attributes (e.g. dataclasses). You can also define a specific
  478. position for attributes in patterns by setting the <code class="docutils literal notranslate"><span class="pre">__match_args__</span></code> special
  479. attribute in your classes. If it’s set to (“x”, “y”), the following patterns are all
  480. equivalent (and all bind the <code class="docutils literal notranslate"><span class="pre">y</span></code> attribute to the <code class="docutils literal notranslate"><span class="pre">var</span></code> variable):</p>
  481. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">var</span><span class="p">)</span>
  482. <span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">var</span><span class="p">)</span>
  483. <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">var</span><span class="p">)</span>
  484. <span class="n">Point</span><span class="p">(</span><span class="n">y</span><span class="o">=</span><span class="n">var</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
  485. </pre></div>
  486. </div>
  487. <p>A recommended way to read patterns is to look at them as an extended form of what you
  488. would put on the left of an assignment, to understand which variables would be set to
  489. what.
  490. Only the standalone names (like <code class="docutils literal notranslate"><span class="pre">var</span></code> above) are assigned to by a match statement.
  491. Dotted names (like <code class="docutils literal notranslate"><span class="pre">foo.bar</span></code>), attribute names (the <code class="docutils literal notranslate"><span class="pre">x=</span></code> and <code class="docutils literal notranslate"><span class="pre">y=</span></code> above) or class names
  492. (recognized by the “(…)” next to them like <code class="docutils literal notranslate"><span class="pre">Point</span></code> above) are never assigned to.</p>
  493. <p>Patterns can be arbitrarily nested. For example, if we have a short
  494. list of Points, with <code class="docutils literal notranslate"><span class="pre">__match_args__</span></code> added, we could match it like this:</p>
  495. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Point</span><span class="p">:</span>
  496. <span class="n">__match_args__</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">)</span>
  497. <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
  498. <span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
  499. <span class="bp">self</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
  500. <span class="k">match</span> <span class="n">points</span><span class="p">:</span>
  501. <span class="k">case</span> <span class="p">[]:</span>
  502. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;No points&quot;</span><span class="p">)</span>
  503. <span class="k">case</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)]:</span>
  504. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The origin&quot;</span><span class="p">)</span>
  505. <span class="k">case</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]:</span>
  506. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Single point </span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  507. <span class="k">case</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">y2</span><span class="p">)]:</span>
  508. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Two on the Y axis at </span><span class="si">{</span><span class="n">y1</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">y2</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  509. <span class="k">case</span><span class="w"> </span><span class="k">_</span><span class="p">:</span>
  510. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Something else&quot;</span><span class="p">)</span>
  511. </pre></div>
  512. </div>
  513. <p>We can add an <code class="docutils literal notranslate"><span class="pre">if</span></code> clause to a pattern, known as a “guard”. If the
  514. guard is false, <code class="docutils literal notranslate"><span class="pre">match</span></code> goes on to try the next case block. Note
  515. that value capture happens before the guard is evaluated:</p>
  516. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">match</span> <span class="n">point</span><span class="p">:</span>
  517. <span class="k">case</span> <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">y</span><span class="p">:</span>
  518. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Y=X at </span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
  519. <span class="k">case</span> <span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
  520. <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not on the diagonal&quot;</span><span class="p">)</span>
  521. </pre></div>
  522. </div>
  523. <p>Several other key features of this statement:</p>
  524. <ul>
  525. <li><p>Like unpacking assignments, tuple and list patterns have exactly the
  526. same meaning and actually match arbitrary sequences. An important
  527. exception is that they don’t match iterators or strings.</p></li>
  528. <li><p>Sequence patterns support extended unpacking: <code class="docutils literal notranslate"><span class="pre">[x,</span> <span class="pre">y,</span> <span class="pre">*rest]</span></code> and <code class="docutils literal notranslate"><span class="pre">(x,</span> <span class="pre">y,</span>
  529. <span class="pre">*rest)</span></code> work similar to unpacking assignments. The
  530. name after <code class="docutils literal notranslate"><span class="pre">*</span></code> may also be <code class="docutils literal notranslate"><span class="pre">_</span></code>, so <code class="docutils literal notranslate"><span class="pre">(x,</span> <span class="pre">y,</span> <span class="pre">*_)</span></code> matches a sequence
  531. of at least two items without binding the remaining items.</p></li>
  532. <li><p>Mapping patterns: <code class="docutils literal notranslate"><span class="pre">{&quot;bandwidth&quot;:</span> <span class="pre">b,</span> <span class="pre">&quot;latency&quot;:</span> <span class="pre">l}</span></code> captures the
  533. <code class="docutils literal notranslate"><span class="pre">&quot;bandwidth&quot;</span></code> and <code class="docutils literal notranslate"><span class="pre">&quot;latency&quot;</span></code> values from a dictionary. Unlike sequence
  534. patterns, extra keys are ignored. An unpacking like <code class="docutils literal notranslate"><span class="pre">**rest</span></code> is also
  535. supported. (But <code class="docutils literal notranslate"><span class="pre">**_</span></code> would be redundant, so it is not allowed.)</p></li>
  536. <li><p>Subpatterns may be captured using the <code class="docutils literal notranslate"><span class="pre">as</span></code> keyword:</p>
  537. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">case</span> <span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span> <span class="n">Point</span><span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">)</span> <span class="k">as</span> <span class="n">p2</span><span class="p">):</span> <span class="o">...</span>
  538. </pre></div>
  539. </div>
  540. <p>will capture the second element of the input as <code class="docutils literal notranslate"><span class="pre">p2</span></code> (as long as the input is
  541. a sequence of two points)</p>
  542. </li>
  543. <li><p>Most literals are compared by equality, however the singletons <code class="docutils literal notranslate"><span class="pre">True</span></code>,
  544. <code class="docutils literal notranslate"><span class="pre">False</span></code> and <code class="docutils literal notranslate"><span class="pre">None</span></code> are compared by identity.</p></li>
  545. <li><p>Patterns may use named constants. These must be dotted names
  546. to prevent them from being interpreted as capture variable:</p>
  547. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">enum</span> <span class="kn">import</span> <span class="n">Enum</span>
  548. <span class="k">class</span> <span class="nc">Color</span><span class="p">(</span><span class="n">Enum</span><span class="p">):</span>
  549. <span class="n">RED</span> <span class="o">=</span> <span class="s1">&#39;red&#39;</span>
  550. <span class="n">GREEN</span> <span class="o">=</span> <span class="s1">&#39;green&#39;</span>
  551. <span class="n">BLUE</span> <span class="o">=</span> <span class="s1">&#39;blue&#39;</span>
  552. <span class="n">color</span> <span class="o">=</span> <span class="n">Color</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s2">&quot;Enter your choice of &#39;red&#39;, &#39;blue&#39; or &#39;green&#39;: &quot;</span><span class="p">))</span>
  553. <span class="k">match</span> <span class="n">color</span><span class="p">:</span>
  554. <span class="k">case</span> <span class="n">Color</span><span class="o">.</span><span class="n">RED</span><span class="p">:</span>
  555. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;I see red!&quot;</span><span class="p">)</span>
  556. <span class="k">case</span> <span class="n">Color</span><span class="o">.</span><span class="n">GREEN</span><span class="p">:</span>
  557. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Grass is green&quot;</span><span class="p">)</span>
  558. <span class="k">case</span> <span class="n">Color</span><span class="o">.</span><span class="n">BLUE</span><span class="p">:</span>
  559. <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;I&#39;m feeling the blues :(&quot;</span><span class="p">)</span>
  560. </pre></div>
  561. </div>
  562. </li>
  563. </ul>
  564. <p>For a more detailed explanation and additional examples, you can look into
  565. <span class="target" id="index-1"></span><a class="pep reference external" href="https://peps.python.org/pep-0636/"><strong>PEP 636</strong></a> which is written in a tutorial format.</p>
  566. </section>
  567. <section id="defining-functions">
  568. <span id="tut-functions"></span><h2><span class="section-number">4.7. </span>Defining Functions<a class="headerlink" href="#defining-functions" title="Link to this heading">¶</a></h2>
  569. <p>We can create a function that writes the Fibonacci series to an arbitrary
  570. boundary:</p>
  571. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  572. <span class="gp">... </span><span class="w"> </span><span class="sd">&quot;&quot;&quot;Print a Fibonacci series up to n.&quot;&quot;&quot;</span>
  573. <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>
  574. <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>
  575. <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>
  576. <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>
  577. <span class="gp">... </span> <span class="nb">print</span><span class="p">()</span>
  578. <span class="gp">...</span>
  579. <span class="gp">&gt;&gt;&gt; </span><span class="c1"># Now call the function we just defined:</span>
  580. <span class="gp">... </span><span class="n">fib</span><span class="p">(</span><span class="mi">2000</span><span class="p">)</span>
  581. <span class="go">0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597</span>
  582. </pre></div>
  583. </div>
  584. <p id="index-2">The keyword <a class="reference internal" href="../reference/compound_stmts.html#def"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">def</span></code></a> introduces a function <em>definition</em>. It must be
  585. followed by the function name and the parenthesized list of formal parameters.
  586. The statements that form the body of the function start at the next line, and
  587. must be indented.</p>
  588. <p>The first statement of the function body can optionally be a string literal;
  589. this string literal is the function’s documentation string, or <em class="dfn">docstring</em>.
  590. (More about docstrings can be found in the section <a class="reference internal" href="#tut-docstrings"><span class="std std-ref">Documentation Strings</span></a>.)
  591. There are tools which use docstrings to automatically produce online or printed
  592. documentation, or to let the user interactively browse through code; it’s good
  593. practice to include docstrings in code that you write, so make a habit of it.</p>
  594. <p>The <em>execution</em> of a function introduces a new symbol table used for the local
  595. variables of the function. More precisely, all variable assignments in a
  596. function store the value in the local symbol table; whereas variable references
  597. first look in the local symbol table, then in the local symbol tables of
  598. enclosing functions, then in the global symbol table, and finally in the table
  599. of built-in names. Thus, global variables and variables of enclosing functions
  600. cannot be directly assigned a value within a function (unless, for global
  601. variables, named in a <a class="reference internal" href="../reference/simple_stmts.html#global"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">global</span></code></a> statement, or, for variables of enclosing
  602. functions, named in a <a class="reference internal" href="../reference/simple_stmts.html#nonlocal"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">nonlocal</span></code></a> statement), although they may be
  603. referenced.</p>
  604. <p>The actual parameters (arguments) to a function call are introduced in the local
  605. symbol table of the called function when it is called; thus, arguments are
  606. passed using <em>call by value</em> (where the <em>value</em> is always an object <em>reference</em>,
  607. not the value of the object). <a class="footnote-reference brackets" href="#id2" id="id1" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a> When a function calls another function,
  608. or calls itself recursively, a new
  609. local symbol table is created for that call.</p>
  610. <p>A function definition associates the function name with the function object in
  611. the current symbol table. The interpreter recognizes the object pointed to by
  612. that name as a user-defined function. Other names can also point to that same
  613. function object and can also be used to access the function:</p>
  614. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">fib</span>
  615. <span class="go">&lt;function fib at 10042ed0&gt;</span>
  616. <span class="gp">&gt;&gt;&gt; </span><span class="n">f</span> <span class="o">=</span> <span class="n">fib</span>
  617. <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>
  618. <span class="go">0 1 1 2 3 5 8 13 21 34 55 89</span>
  619. </pre></div>
  620. </div>
  621. <p>Coming from other languages, you might object that <code class="docutils literal notranslate"><span class="pre">fib</span></code> is not a function but
  622. a procedure since it doesn’t return a value. In fact, even functions without a
  623. <a class="reference internal" href="../reference/simple_stmts.html#return"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">return</span></code></a> statement do return a value, albeit a rather boring one. This
  624. value is called <code class="docutils literal notranslate"><span class="pre">None</span></code> (it’s a built-in name). Writing the value <code class="docutils literal notranslate"><span class="pre">None</span></code> is
  625. normally suppressed by the interpreter if it would be the only value written.
  626. 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 notranslate"><span class="pre">print()</span></code></a>:</p>
  627. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  628. <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>
  629. <span class="go">None</span>
  630. </pre></div>
  631. </div>
  632. <p>It is simple to write a function that returns a list of the numbers of the
  633. Fibonacci series, instead of printing it:</p>
  634. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  635. <span class="gp">... </span><span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a list containing the Fibonacci series up to n.&quot;&quot;&quot;</span>
  636. <span class="gp">... </span> <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
  637. <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>
  638. <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>
  639. <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>
  640. <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>
  641. <span class="gp">... </span> <span class="k">return</span> <span class="n">result</span>
  642. <span class="gp">...</span>
  643. <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>
  644. <span class="gp">&gt;&gt;&gt; </span><span class="n">f100</span> <span class="c1"># write the result</span>
  645. <span class="go">[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]</span>
  646. </pre></div>
  647. </div>
  648. <p>This example, as usual, demonstrates some new Python features:</p>
  649. <ul class="simple">
  650. <li><p>The <a class="reference internal" href="../reference/simple_stmts.html#return"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">return</span></code></a> statement returns with a value from a function.
  651. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">return</span></code> without an expression argument returns <code class="docutils literal notranslate"><span class="pre">None</span></code>. Falling off
  652. the end of a function also returns <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p></li>
  653. <li><p>The statement <code class="docutils literal notranslate"><span class="pre">result.append(a)</span></code> calls a <em>method</em> of the list object
  654. <code class="docutils literal notranslate"><span class="pre">result</span></code>. A method is a function that ‘belongs’ to an object and is named
  655. <code class="docutils literal notranslate"><span class="pre">obj.methodname</span></code>, where <code class="docutils literal notranslate"><span class="pre">obj</span></code> is some object (this may be an expression),
  656. and <code class="docutils literal notranslate"><span class="pre">methodname</span></code> is the name of a method that is defined by the object’s type.
  657. Different types define different methods. Methods of different types may have
  658. the same name without causing ambiguity. (It is possible to define your own
  659. object types and methods, using <em>classes</em>, see <a class="reference internal" href="classes.html#tut-classes"><span class="std std-ref">Classes</span></a>)
  660. The method <code class="xref py py-meth docutils literal notranslate"><span class="pre">append()</span></code> shown in the example is defined for list objects; it
  661. adds a new element at the end of the list. In this example it is equivalent to
  662. <code class="docutils literal notranslate"><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.</p></li>
  663. </ul>
  664. </section>
  665. <section id="more-on-defining-functions">
  666. <span id="tut-defining"></span><h2><span class="section-number">4.8. </span>More on Defining Functions<a class="headerlink" href="#more-on-defining-functions" title="Link to this heading">¶</a></h2>
  667. <p>It is also possible to define functions with a variable number of arguments.
  668. There are three forms, which can be combined.</p>
  669. <section id="default-argument-values">
  670. <span id="tut-defaultargs"></span><h3><span class="section-number">4.8.1. </span>Default Argument Values<a class="headerlink" href="#default-argument-values" title="Link to this heading">¶</a></h3>
  671. <p>The most useful form is to specify a default value for one or more arguments.
  672. This creates a function that can be called with fewer arguments than it is
  673. defined to allow. For example:</p>
  674. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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">reminder</span><span class="o">=</span><span class="s1">&#39;Please try again!&#39;</span><span class="p">):</span>
  675. <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
  676. <span class="n">reply</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="n">prompt</span><span class="p">)</span>
  677. <span class="k">if</span> <span class="n">reply</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>
  678. <span class="k">return</span> <span class="kc">True</span>
  679. <span class="k">if</span> <span class="n">reply</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>
  680. <span class="k">return</span> <span class="kc">False</span>
  681. <span class="n">retries</span> <span class="o">=</span> <span class="n">retries</span> <span class="o">-</span> <span class="mi">1</span>
  682. <span class="k">if</span> <span class="n">retries</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
  683. <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">&#39;invalid user response&#39;</span><span class="p">)</span>
  684. <span class="nb">print</span><span class="p">(</span><span class="n">reminder</span><span class="p">)</span>
  685. </pre></div>
  686. </div>
  687. <p>This function can be called in several ways:</p>
  688. <ul class="simple">
  689. <li><p>giving only the mandatory argument:
  690. <code class="docutils literal notranslate"><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></p></li>
  691. <li><p>giving one of the optional arguments:
  692. <code class="docutils literal notranslate"><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></p></li>
  693. <li><p>or even giving all arguments:
  694. <code class="docutils literal notranslate"><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></p></li>
  695. </ul>
  696. <p>This example also introduces the <a class="reference internal" href="../reference/expressions.html#in"><code class="xref std std-keyword docutils literal notranslate"><span class="pre">in</span></code></a> keyword. This tests whether or
  697. not a sequence contains a certain value.</p>
  698. <p>The default values are evaluated at the point of function definition in the
  699. <em>defining</em> scope, so that</p>
  700. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">i</span> <span class="o">=</span> <span class="mi">5</span>
  701. <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>
  702. <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
  703. <span class="n">i</span> <span class="o">=</span> <span class="mi">6</span>
  704. <span class="n">f</span><span class="p">()</span>
  705. </pre></div>
  706. </div>
  707. <p>will print <code class="docutils literal notranslate"><span class="pre">5</span></code>.</p>
  708. <p><strong>Important warning:</strong> The default value is evaluated only once. This makes a
  709. difference when the default is a mutable object such as a list, dictionary, or
  710. instances of most classes. For example, the following function accumulates the
  711. arguments passed to it on subsequent calls:</p>
  712. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  713. <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>
  714. <span class="k">return</span> <span class="n">L</span>
  715. <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>
  716. <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>
  717. <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>
  718. </pre></div>
  719. </div>
  720. <p>This will print</p>
  721. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
  722. <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
  723. <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>
  724. </pre></div>
  725. </div>
  726. <p>If you don’t want the default to be shared between subsequent calls, you can
  727. write the function like this instead:</p>
  728. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  729. <span class="k">if</span> <span class="n">L</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
  730. <span class="n">L</span> <span class="o">=</span> <span class="p">[]</span>
  731. <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>
  732. <span class="k">return</span> <span class="n">L</span>
  733. </pre></div>
  734. </div>
  735. </section>
  736. <section id="keyword-arguments">
  737. <span id="tut-keywordargs"></span><h3><span class="section-number">4.8.2. </span>Keyword Arguments<a class="headerlink" href="#keyword-arguments" title="Link to this heading">¶</a></h3>
  738. <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>
  739. of the form <code class="docutils literal notranslate"><span class="pre">kwarg=value</span></code>. For instance, the following function:</p>
  740. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></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> <span class="nb">type</span><span class="o">=</span><span class="s1">&#39;Norwegian Blue&#39;</span><span class="p">):</span>
  741. <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>
  742. <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>
  743. <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>
  744. <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>
  745. </pre></div>
  746. </div>
  747. <p>accepts one required argument (<code class="docutils literal notranslate"><span class="pre">voltage</span></code>) and three optional arguments
  748. (<code class="docutils literal notranslate"><span class="pre">state</span></code>, <code class="docutils literal notranslate"><span class="pre">action</span></code>, and <code class="docutils literal notranslate"><span class="pre">type</span></code>). This function can be called in any
  749. of the following ways:</p>
  750. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  751. <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>
  752. <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>
  753. <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>
  754. <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>
  755. <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>
  756. </pre></div>
  757. </div>
  758. <p>but all the following calls would be invalid:</p>
  759. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">parrot</span><span class="p">()</span> <span class="c1"># required argument missing</span>
  760. <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>
  761. <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>
  762. <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>
  763. </pre></div>
  764. </div>
  765. <p>In a function call, keyword arguments must follow positional arguments.
  766. All the keyword arguments passed must match one of the arguments
  767. accepted by the function (e.g. <code class="docutils literal notranslate"><span class="pre">actor</span></code> is not a valid argument for the
  768. <code class="docutils literal notranslate"><span class="pre">parrot</span></code> function), and their order is not important. This also includes
  769. non-optional arguments (e.g. <code class="docutils literal notranslate"><span class="pre">parrot(voltage=1000)</span></code> is valid too).
  770. No argument may receive a value more than once.
  771. Here’s an example that fails due to this restriction:</p>
  772. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  773. <span class="gp">... </span> <span class="k">pass</span>
  774. <span class="gp">...</span>
  775. <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>
  776. <span class="gt">Traceback (most recent call last):</span>
  777. File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span>
  778. <span class="gr">TypeError</span>: <span class="n">function() got multiple values for argument &#39;a&#39;</span>
  779. </pre></div>
  780. </div>
  781. <p>When a final formal parameter of the form <code class="docutils literal notranslate"><span class="pre">**name</span></code> is present, it receives a
  782. dictionary (see <a class="reference internal" href="../library/stdtypes.html#typesmapping"><span class="std std-ref">Mapping Types — dict</span></a>) containing all keyword arguments except for
  783. those corresponding to a formal parameter. This may be combined with a formal
  784. parameter of the form <code class="docutils literal notranslate"><span class="pre">*name</span></code> (described in the next subsection) which
  785. receives a <a class="reference internal" href="datastructures.html#tut-tuples"><span class="std std-ref">tuple</span></a> containing the positional
  786. arguments beyond the formal parameter list. (<code class="docutils literal notranslate"><span class="pre">*name</span></code> must occur
  787. before <code class="docutils literal notranslate"><span class="pre">**name</span></code>.) For example, if we define a function like this:</p>
  788. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  789. <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>
  790. <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>
  791. <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">arguments</span><span class="p">:</span>
  792. <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
  793. <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>
  794. <span class="k">for</span> <span class="n">kw</span> <span class="ow">in</span> <span class="n">keywords</span><span class="p">:</span>
  795. <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>
  796. </pre></div>
  797. </div>
  798. <p>It could be called like this:</p>
  799. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  800. <span class="s2">&quot;It&#39;s really very, VERY runny, sir.&quot;</span><span class="p">,</span>
  801. <span class="n">shopkeeper</span><span class="o">=</span><span class="s2">&quot;Michael Palin&quot;</span><span class="p">,</span>
  802. <span class="n">client</span><span class="o">=</span><span class="s2">&quot;John Cleese&quot;</span><span class="p">,</span>
  803. <span class="n">sketch</span><span class="o">=</span><span class="s2">&quot;Cheese Shop Sketch&quot;</span><span class="p">)</span>
  804. </pre></div>
  805. </div>
  806. <p>and of course it would print:</p>
  807. <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>-- Do you have any Limburger ?
  808. -- I&#39;m sorry, we&#39;re all out of Limburger
  809. It&#39;s very runny, sir.
  810. It&#39;s really very, VERY runny, sir.
  811. ----------------------------------------
  812. shopkeeper : Michael Palin
  813. client : John Cleese
  814. sketch : Cheese Shop Sketch
  815. </pre></div>
  816. </div>
  817. <p>Note that the order in which the keyword arguments are printed is guaranteed
  818. to match the order in which they were provided in the function call.</p>
  819. </section>
  820. <section id="special-parameters">
  821. <h3><span class="section-number">4.8.3. </span>Special parameters<a class="headerlink" href="#special-parameters" title="Link to this heading">¶</a></h3>
  822. <p>By default, arguments may be passed to a Python function either by position
  823. or explicitly by keyword. For readability and performance, it makes sense to
  824. restrict the way arguments can be passed so that a developer need only look
  825. at the function definition to determine if items are passed by position, by
  826. position or keyword, or by keyword.</p>
  827. <p>A function definition may look like:</p>
  828. <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
  829. ----------- ---------- ----------
  830. | | |
  831. | Positional or keyword |
  832. | - Keyword only
  833. -- Positional only
  834. </pre></div>
  835. </div>
  836. <p>where <code class="docutils literal notranslate"><span class="pre">/</span></code> and <code class="docutils literal notranslate"><span class="pre">*</span></code> are optional. If used, these symbols indicate the kind of
  837. parameter by how the arguments may be passed to the function:
  838. positional-only, positional-or-keyword, and keyword-only. Keyword parameters
  839. are also referred to as named parameters.</p>
  840. <section id="positional-or-keyword-arguments">
  841. <h4><span class="section-number">4.8.3.1. </span>Positional-or-Keyword Arguments<a class="headerlink" href="#positional-or-keyword-arguments" title="Link to this heading">¶</a></h4>
  842. <p>If <code class="docutils literal notranslate"><span class="pre">/</span></code> and <code class="docutils literal notranslate"><span class="pre">*</span></code> are not present in the function definition, arguments may
  843. be passed to a function by position or by keyword.</p>
  844. </section>
  845. <section id="positional-only-parameters">
  846. <h4><span class="section-number">4.8.3.2. </span>Positional-Only Parameters<a class="headerlink" href="#positional-only-parameters" title="Link to this heading">¶</a></h4>
  847. <p>Looking at this in a bit more detail, it is possible to mark certain parameters
  848. as <em>positional-only</em>. If <em>positional-only</em>, the parameters’ order matters, and
  849. the parameters cannot be passed by keyword. Positional-only parameters are
  850. placed before a <code class="docutils literal notranslate"><span class="pre">/</span></code> (forward-slash). The <code class="docutils literal notranslate"><span class="pre">/</span></code> is used to logically
  851. separate the positional-only parameters from the rest of the parameters.
  852. If there is no <code class="docutils literal notranslate"><span class="pre">/</span></code> in the function definition, there are no positional-only
  853. parameters.</p>
  854. <p>Parameters following the <code class="docutils literal notranslate"><span class="pre">/</span></code> may be <em>positional-or-keyword</em> or <em>keyword-only</em>.</p>
  855. </section>
  856. <section id="keyword-only-arguments">
  857. <h4><span class="section-number">4.8.3.3. </span>Keyword-Only Arguments<a class="headerlink" href="#keyword-only-arguments" title="Link to this heading">¶</a></h4>
  858. <p>To mark parameters as <em>keyword-only</em>, indicating the parameters must be passed
  859. by keyword argument, place an <code class="docutils literal notranslate"><span class="pre">*</span></code> in the arguments list just before the first
  860. <em>keyword-only</em> parameter.</p>
  861. </section>
  862. <section id="function-examples">
  863. <h4><span class="section-number">4.8.3.4. </span>Function Examples<a class="headerlink" href="#function-examples" title="Link to this heading">¶</a></h4>
  864. <p>Consider the following example function definitions paying close attention to the
  865. markers <code class="docutils literal notranslate"><span class="pre">/</span></code> and <code class="docutils literal notranslate"><span class="pre">*</span></code>:</p>
  866. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">standard_arg</span><span class="p">(</span><span class="n">arg</span><span class="p">):</span>
  867. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
  868. <span class="gp">...</span>
  869. <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">pos_only_arg</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="o">/</span><span class="p">):</span>
  870. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
  871. <span class="gp">...</span>
  872. <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">kwd_only_arg</span><span class="p">(</span><span class="o">*</span><span class="p">,</span> <span class="n">arg</span><span class="p">):</span>
  873. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
  874. <span class="gp">...</span>
  875. <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">combined_example</span><span class="p">(</span><span class="n">pos_only</span><span class="p">,</span> <span class="o">/</span><span class="p">,</span> <span class="n">standard</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">kwd_only</span><span class="p">):</span>
  876. <span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">pos_only</span><span class="p">,</span> <span class="n">standard</span><span class="p">,</span> <span class="n">kwd_only</span><span class="p">)</span>
  877. </pre></div>
  878. </div>
  879. <p>The first function definition, <code class="docutils literal notranslate"><span class="pre">standard_arg</span></code>, the most familiar form,
  880. places no restrictions on the calling convention and arguments may be
  881. passed by position or keyword:</p>
  882. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">standard_arg</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
  883. <span class="go">2</span>
  884. <span class="gp">&gt;&gt;&gt; </span><span class="n">standard_arg</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
  885. <span class="go">2</span>
  886. </pre></div>
  887. </div>
  888. <p>The second function <code class="docutils literal notranslate"><span class="pre">pos_only_arg</span></code> is restricted to only use positional
  889. parameters as there is a <code class="docutils literal notranslate"><span class="pre">/</span></code> in the function definition:</p>
  890. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">pos_only_arg</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
  891. <span class="go">1</span>
  892. <span class="gp">&gt;&gt;&gt; </span><span class="n">pos_only_arg</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
  893. <span class="gt">Traceback (most recent call last):</span>
  894. File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span>
  895. <span class="gr">TypeError</span>: <span class="n">pos_only_arg() got some positional-only arguments passed as keyword arguments: &#39;arg&#39;</span>
  896. </pre></div>
  897. </div>
  898. <p>The third function <code class="docutils literal notranslate"><span class="pre">kwd_only_args</span></code> only allows keyword arguments as indicated
  899. by a <code class="docutils literal notranslate"><span class="pre">*</span></code> in the function definition:</p>
  900. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">kwd_only_arg</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
  901. <span class="gt">Traceback (most recent call last):</span>
  902. File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span>
  903. <span class="gr">TypeError</span>: <span class="n">kwd_only_arg() takes 0 positional arguments but 1 was given</span>
  904. <span class="gp">&gt;&gt;&gt; </span><span class="n">kwd_only_arg</span><span class="p">(</span><span class="n">arg</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
  905. <span class="go">3</span>
  906. </pre></div>
  907. </div>
  908. <p>And the last uses all three calling conventions in the same function
  909. definition:</p>
  910. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">combined_example</span><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>
  911. <span class="gt">Traceback (most recent call last):</span>
  912. File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span>
  913. <span class="gr">TypeError</span>: <span class="n">combined_example() takes 2 positional arguments but 3 were given</span>
  914. <span class="gp">&gt;&gt;&gt; </span><span class="n">combined_example</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">kwd_only</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
  915. <span class="go">1 2 3</span>
  916. <span class="gp">&gt;&gt;&gt; </span><span class="n">combined_example</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">standard</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">kwd_only</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
  917. <span class="go">1 2 3</span>
  918. <span class="gp">&gt;&gt;&gt; </span><span class="n">combined_example</span><span class="p">(</span><span class="n">pos_only</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">standard</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">kwd_only</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
  919. <span class="gt">Traceback (most recent call last):</span>
  920. File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span>
  921. <span class="gr">TypeError</span>: <span class="n">combined_example() got some positional-only arguments passed as keyword arguments: &#39;pos_only&#39;</span>
  922. </pre></div>
  923. </div>
  924. <p>Finally, consider this function definition which has a potential collision between the positional argument <code class="docutils literal notranslate"><span class="pre">name</span></code> and <code class="docutils literal notranslate"><span class="pre">**kwds</span></code> which has <code class="docutils literal notranslate"><span class="pre">name</span></code> as a key:</p>
  925. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
  926. <span class="k">return</span> <span class="s1">&#39;name&#39;</span> <span class="ow">in</span> <span class="n">kwds</span>
  927. </pre></div>
  928. </div>
  929. <p>There is no possible call that will make it return <code class="docutils literal notranslate"><span class="pre">True</span></code> as the keyword <code class="docutils literal notranslate"><span class="pre">'name'</span></code>
  930. will always bind to the first parameter. For example:</p>
  931. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">foo</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">})</span>
  932. <span class="gt">Traceback (most recent call last):</span>
  933. File <span class="nb">&quot;&lt;stdin&gt;&quot;</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span>
  934. <span class="gr">TypeError</span>: <span class="n">foo() got multiple values for argument &#39;name&#39;</span>
  935. <span class="gp">&gt;&gt;&gt;</span>
  936. </pre></div>
  937. </div>
  938. <p>But using <code class="docutils literal notranslate"><span class="pre">/</span></code> (positional only arguments), it is possible since it allows <code class="docutils literal notranslate"><span class="pre">name</span></code> as a positional argument and <code class="docutils literal notranslate"><span class="pre">'name'</span></code> as a key in the keyword arguments:</p>
  939. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="o">/</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
  940. <span class="gp">... </span> <span class="k">return</span> <span class="s1">&#39;name&#39;</span> <span class="ow">in</span> <span class="n">kwds</span>
  941. <span class="gp">...</span>
  942. <span class="gp">&gt;&gt;&gt; </span><span class="n">foo</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">**</span><span class="p">{</span><span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">})</span>
  943. <span class="go">True</span>
  944. </pre></div>
  945. </div>
  946. <p>In other words, the names of positional-only parameters can be used in
  947. <code class="docutils literal notranslate"><span class="pre">**kwds</span></code> without ambiguity.</p>
  948. </section>
  949. <section id="recap">
  950. <h4><span class="section-number">4.8.3.5. </span>Recap<a class="headerlink" href="#recap" title="Link to this heading">¶</a></h4>
  951. <p>The use case will determine which parameters to use in the function definition:</p>
  952. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">pos1</span><span class="p">,</span> <span class="n">pos2</span><span class="p">,</span> <span class="o">/</span><span class="p">,</span> <span class="n">pos_or_kwd</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">kwd1</span><span class="p">,</span> <span class="n">kwd2</span><span class="p">):</span>
  953. </pre></div>
  954. </div>
  955. <p>As guidance:</p>
  956. <ul class="simple">
  957. <li><p>Use positional-only if you want the name of the parameters to not be
  958. available to the user. This is useful when parameter names have no real
  959. meaning, if you want to enforce the order of the arguments when the function
  960. is called or if you need to take some positional parameters and arbitrary
  961. keywords.</p></li>
  962. <li><p>Use keyword-only when names have meaning and the function definition is
  963. more understandable by being explicit with names or you want to prevent
  964. users relying on the position of the argument being passed.</p></li>
  965. <li><p>For an API, use positional-only to prevent breaking API changes
  966. if the parameter’s name is modified in the future.</p></li>
  967. </ul>
  968. </section>
  969. </section>
  970. <section id="arbitrary-argument-lists">
  971. <span id="tut-arbitraryargs"></span><h3><span class="section-number">4.8.4. </span>Arbitrary Argument Lists<a class="headerlink" href="#arbitrary-argument-lists" title="Link to this heading">¶</a></h3>
  972. <p id="index-3">Finally, the least frequently used option is to specify that a function can be
  973. called with an arbitrary number of arguments. These arguments will be wrapped
  974. up in a tuple (see <a class="reference internal" href="datastructures.html#tut-tuples"><span class="std std-ref">Tuples and Sequences</span></a>). Before the variable number of arguments,
  975. zero or more normal arguments may occur.</p>
  976. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  977. <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>
  978. </pre></div>
  979. </div>
  980. <p>Normally, these <em>variadic</em> arguments will be last in the list of formal
  981. parameters, because they scoop up all remaining input arguments that are
  982. passed to the function. Any formal parameters which occur after the <code class="docutils literal notranslate"><span class="pre">*args</span></code>
  983. parameter are ‘keyword-only’ arguments, meaning that they can only be used as
  984. keywords rather than positional arguments.</p>
  985. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  986. <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>
  987. <span class="gp">...</span>
  988. <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>
  989. <span class="go">&#39;earth/mars/venus&#39;</span>
  990. <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>
  991. <span class="go">&#39;earth.mars.venus&#39;</span>
  992. </pre></div>
  993. </div>
  994. </section>
  995. <section id="unpacking-argument-lists">
  996. <span id="tut-unpacking-arguments"></span><h3><span class="section-number">4.8.5. </span>Unpacking Argument Lists<a class="headerlink" href="#unpacking-argument-lists" title="Link to this heading">¶</a></h3>
  997. <p>The reverse situation occurs when the arguments are already in a list or tuple
  998. but need to be unpacked for a function call requiring separate positional
  999. 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 notranslate"><span class="pre">range()</span></code></a> function expects separate
  1000. <em>start</em> and <em>stop</em> arguments. If they are not available separately, write the
  1001. function call with the <code class="docutils literal notranslate"><span class="pre">*</span></code>-operator to unpack the arguments out of a list
  1002. or tuple:</p>
  1003. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  1004. <span class="go">[3, 4, 5]</span>
  1005. <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>
  1006. <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>
  1007. <span class="go">[3, 4, 5]</span>
  1008. </pre></div>
  1009. </div>
  1010. <p id="index-4">In the same fashion, dictionaries can deliver keyword arguments with the
  1011. <code class="docutils literal notranslate"><span class="pre">**</span></code>-operator:</p>
  1012. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  1013. <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>
  1014. <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>
  1015. <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>
  1016. <span class="gp">...</span>
  1017. <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>
  1018. <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>
  1019. <span class="go">-- This parrot wouldn&#39;t VOOM if you put four million volts through it. E&#39;s bleedin&#39; demised !</span>
  1020. </pre></div>
  1021. </div>
  1022. </section>
  1023. <section id="lambda-expressions">
  1024. <span id="tut-lambda"></span><h3><span class="section-number">4.8.6. </span>Lambda Expressions<a class="headerlink" href="#lambda-expressions" title="Link to this heading">¶</a></h3>
  1025. <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 notranslate"><span class="pre">lambda</span></code></a> keyword.
  1026. This function returns the sum of its two arguments: <code class="docutils literal notranslate"><span class="pre">lambda</span> <span class="pre">a,</span> <span class="pre">b:</span> <span class="pre">a+b</span></code>.
  1027. Lambda functions can be used wherever function objects are required. They are
  1028. syntactically restricted to a single expression. Semantically, they are just
  1029. syntactic sugar for a normal function definition. Like nested function
  1030. definitions, lambda functions can reference variables from the containing
  1031. scope:</p>
  1032. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  1033. <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>
  1034. <span class="gp">...</span>
  1035. <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>
  1036. <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>
  1037. <span class="go">42</span>
  1038. <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>
  1039. <span class="go">43</span>
  1040. </pre></div>
  1041. </div>
  1042. <p>The above example uses a lambda expression to return a function. Another use
  1043. is to pass a small function as an argument:</p>
  1044. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  1045. <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>
  1046. <span class="gp">&gt;&gt;&gt; </span><span class="n">pairs</span>
  1047. <span class="go">[(4, &#39;four&#39;), (1, &#39;one&#39;), (3, &#39;three&#39;), (2, &#39;two&#39;)]</span>
  1048. </pre></div>
  1049. </div>
  1050. </section>
  1051. <section id="documentation-strings">
  1052. <span id="tut-docstrings"></span><h3><span class="section-number">4.8.7. </span>Documentation Strings<a class="headerlink" href="#documentation-strings" title="Link to this heading">¶</a></h3>
  1053. <p id="index-5">Here are some conventions about the content and formatting of documentation
  1054. strings.</p>
  1055. <p>The first line should always be a short, concise summary of the object’s
  1056. purpose. For brevity, it should not explicitly state the object’s name or type,
  1057. since these are available by other means (except if the name happens to be a
  1058. verb describing a function’s operation). This line should begin with a capital
  1059. letter and end with a period.</p>
  1060. <p>If there are more lines in the documentation string, the second line should be
  1061. blank, visually separating the summary from the rest of the description. The
  1062. following lines should be one or more paragraphs describing the object’s calling
  1063. conventions, its side effects, etc.</p>
  1064. <p>The Python parser does not strip indentation from multi-line string literals in
  1065. Python, so tools that process documentation have to strip indentation if
  1066. desired. This is done using the following convention. The first non-blank line
  1067. <em>after</em> the first line of the string determines the amount of indentation for
  1068. the entire documentation string. (We can’t use the first line since it is
  1069. generally adjacent to the string’s opening quotes so its indentation is not
  1070. apparent in the string literal.) Whitespace “equivalent” to this indentation is
  1071. then stripped from the start of all lines of the string. Lines that are
  1072. indented less should not occur, but if they occur all their leading whitespace
  1073. should be stripped. Equivalence of whitespace should be tested after expansion
  1074. of tabs (to 8 spaces, normally).</p>
  1075. <p>Here is an example of a multi-line docstring:</p>
  1076. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">my_function</span><span class="p">():</span>
  1077. <span class="gp">... </span><span class="w"> </span><span class="sd">&quot;&quot;&quot;Do nothing, but document it.</span>
  1078. <span class="gp">...</span>
  1079. <span class="gp">... </span><span class="sd"> No, really, it doesn&#39;t do anything.</span>
  1080. <span class="gp">... </span><span class="sd"> &quot;&quot;&quot;</span>
  1081. <span class="gp">... </span> <span class="k">pass</span>
  1082. <span class="gp">...</span>
  1083. <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="vm">__doc__</span><span class="p">)</span>
  1084. <span class="go">Do nothing, but document it.</span>
  1085. <span class="go"> No, really, it doesn&#39;t do anything.</span>
  1086. </pre></div>
  1087. </div>
  1088. </section>
  1089. <section id="function-annotations">
  1090. <span id="tut-annotations"></span><h3><span class="section-number">4.8.8. </span>Function Annotations<a class="headerlink" href="#function-annotations" title="Link to this heading">¶</a></h3>
  1091. <p id="index-6"><a class="reference internal" href="../reference/compound_stmts.html#function"><span class="std std-ref">Function annotations</span></a> are completely optional metadata
  1092. information about the types used by user-defined functions (see <span class="target" id="index-7"></span><a class="pep reference external" href="https://peps.python.org/pep-3107/"><strong>PEP 3107</strong></a> and
  1093. <span class="target" id="index-8"></span><a class="pep reference external" href="https://peps.python.org/pep-0484/"><strong>PEP 484</strong></a> for more information).</p>
  1094. <p><a class="reference internal" href="../glossary.html#term-function-annotation"><span class="xref std std-term">Annotations</span></a> are stored in the <code class="xref py py-attr docutils literal notranslate"><span class="pre">__annotations__</span></code>
  1095. attribute of the function as a dictionary and have no effect on any other part of the
  1096. function. Parameter annotations are defined by a colon after the parameter name, followed
  1097. by an expression evaluating to the value of the annotation. Return annotations are
  1098. defined by a literal <code class="docutils literal notranslate"><span class="pre">-&gt;</span></code>, followed by an expression, between the parameter
  1099. 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 notranslate"><span class="pre">def</span></code></a> statement. The
  1100. following example has a required argument, an optional argument, and the return
  1101. value annotated:</p>
  1102. <div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><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>
  1103. <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="vm">__annotations__</span><span class="p">)</span>
  1104. <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>
  1105. <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>
  1106. <span class="gp">...</span>
  1107. <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>
  1108. <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>
  1109. <span class="go">Arguments: spam eggs</span>
  1110. <span class="go">&#39;spam and eggs&#39;</span>
  1111. </pre></div>
  1112. </div>
  1113. </section>
  1114. </section>
  1115. <section id="intermezzo-coding-style">
  1116. <span id="tut-codingstyle"></span><h2><span class="section-number">4.9. </span>Intermezzo: Coding Style<a class="headerlink" href="#intermezzo-coding-style" title="Link to this heading">¶</a></h2>
  1117. <p id="index-9">Now that you are about to write longer, more complex pieces of Python, it is a
  1118. good time to talk about <em>coding style</em>. Most languages can be written (or more
  1119. concise, <em>formatted</em>) in different styles; some are more readable than others.
  1120. Making it easy for others to read your code is always a good idea, and adopting
  1121. a nice coding style helps tremendously for that.</p>
  1122. <p>For Python, <span class="target" id="index-10"></span><a class="pep reference external" href="https://peps.python.org/pep-0008/"><strong>PEP 8</strong></a> has emerged as the style guide that most projects adhere to;
  1123. it promotes a very readable and eye-pleasing coding style. Every Python
  1124. developer should read it at some point; here are the most important points
  1125. extracted for you:</p>
  1126. <ul>
  1127. <li><p>Use 4-space indentation, and no tabs.</p>
  1128. <p>4 spaces are a good compromise between small indentation (allows greater
  1129. nesting depth) and large indentation (easier to read). Tabs introduce
  1130. confusion, and are best left out.</p>
  1131. </li>
  1132. <li><p>Wrap lines so that they don’t exceed 79 characters.</p>
  1133. <p>This helps users with small displays and makes it possible to have several
  1134. code files side-by-side on larger displays.</p>
  1135. </li>
  1136. <li><p>Use blank lines to separate functions and classes, and larger blocks of
  1137. code inside functions.</p></li>
  1138. <li><p>When possible, put comments on a line of their own.</p></li>
  1139. <li><p>Use docstrings.</p></li>
  1140. <li><p>Use spaces around operators and after commas, but not directly inside
  1141. bracketing constructs: <code class="docutils literal notranslate"><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></li>
  1142. <li><p>Name your classes and functions consistently; the convention is to use
  1143. <code class="docutils literal notranslate"><span class="pre">UpperCamelCase</span></code> for classes and <code class="docutils literal notranslate"><span class="pre">lowercase_with_underscores</span></code> for functions
  1144. and methods. Always use <code class="docutils literal notranslate"><span class="pre">self</span></code> as the name for the first method argument
  1145. (see <a class="reference internal" href="classes.html#tut-firstclasses"><span class="std std-ref">A First Look at Classes</span></a> for more on classes and methods).</p></li>
  1146. <li><p>Don’t use fancy encodings if your code is meant to be used in international
  1147. environments. Python’s default, UTF-8, or even plain ASCII work best in any
  1148. case.</p></li>
  1149. <li><p>Likewise, don’t use non-ASCII characters in identifiers if there is only the
  1150. slightest chance people speaking a different language will read or maintain
  1151. the code.</p></li>
  1152. </ul>
  1153. <p class="rubric">Footnotes</p>
  1154. <aside class="footnote-list brackets">
  1155. <aside class="footnote brackets" id="id2" role="doc-footnote">
  1156. <span class="label"><span class="fn-bracket">[</span><a role="doc-backlink" href="#id1">1</a><span class="fn-bracket">]</span></span>
  1157. <p>Actually, <em>call by object reference</em> would be a better description,
  1158. since if a mutable object is passed, the caller will see any changes the
  1159. callee makes to it (items inserted into a list).</p>
  1160. </aside>
  1161. </aside>
  1162. </section>
  1163. </section>
  1164. <div class="clearer"></div>
  1165. </div>
  1166. </div>
  1167. </div>
  1168. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  1169. <div class="sphinxsidebarwrapper">
  1170. <div>
  1171. <h3><a href="../contents.html">Table of Contents</a></h3>
  1172. <ul>
  1173. <li><a class="reference internal" href="#">4. More Control Flow Tools</a><ul>
  1174. <li><a class="reference internal" href="#if-statements">4.1. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">if</span></code> Statements</a></li>
  1175. <li><a class="reference internal" href="#for-statements">4.2. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">for</span></code> Statements</a></li>
  1176. <li><a class="reference internal" href="#the-range-function">4.3. The <code class="xref py py-func docutils literal notranslate"><span class="pre">range()</span></code> Function</a></li>
  1177. <li><a class="reference internal" href="#break-and-continue-statements-and-else-clauses-on-loops">4.4. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">break</span></code> and <code class="xref std std-keyword docutils literal notranslate"><span class="pre">continue</span></code> Statements, and <code class="xref std std-keyword docutils literal notranslate"><span class="pre">else</span></code> Clauses on Loops</a></li>
  1178. <li><a class="reference internal" href="#pass-statements">4.5. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">pass</span></code> Statements</a></li>
  1179. <li><a class="reference internal" href="#match-statements">4.6. <code class="xref std std-keyword docutils literal notranslate"><span class="pre">match</span></code> Statements</a></li>
  1180. <li><a class="reference internal" href="#defining-functions">4.7. Defining Functions</a></li>
  1181. <li><a class="reference internal" href="#more-on-defining-functions">4.8. More on Defining Functions</a><ul>
  1182. <li><a class="reference internal" href="#default-argument-values">4.8.1. Default Argument Values</a></li>
  1183. <li><a class="reference internal" href="#keyword-arguments">4.8.2. Keyword Arguments</a></li>
  1184. <li><a class="reference internal" href="#special-parameters">4.8.3. Special parameters</a><ul>
  1185. <li><a class="reference internal" href="#positional-or-keyword-arguments">4.8.3.1. Positional-or-Keyword Arguments</a></li>
  1186. <li><a class="reference internal" href="#positional-only-parameters">4.8.3.2. Positional-Only Parameters</a></li>
  1187. <li><a class="reference internal" href="#keyword-only-arguments">4.8.3.3. Keyword-Only Arguments</a></li>
  1188. <li><a class="reference internal" href="#function-examples">4.8.3.4. Function Examples</a></li>
  1189. <li><a class="reference internal" href="#recap">4.8.3.5. Recap</a></li>
  1190. </ul>
  1191. </li>
  1192. <li><a class="reference internal" href="#arbitrary-argument-lists">4.8.4. Arbitrary Argument Lists</a></li>
  1193. <li><a class="reference internal" href="#unpacking-argument-lists">4.8.5. Unpacking Argument Lists</a></li>
  1194. <li><a class="reference internal" href="#lambda-expressions">4.8.6. Lambda Expressions</a></li>
  1195. <li><a class="reference internal" href="#documentation-strings">4.8.7. Documentation Strings</a></li>
  1196. <li><a class="reference internal" href="#function-annotations">4.8.8. Function Annotations</a></li>
  1197. </ul>
  1198. </li>
  1199. <li><a class="reference internal" href="#intermezzo-coding-style">4.9. Intermezzo: Coding Style</a></li>
  1200. </ul>
  1201. </li>
  1202. </ul>
  1203. </div>
  1204. <div>
  1205. <h4>Previous topic</h4>
  1206. <p class="topless"><a href="introduction.html"
  1207. title="previous chapter"><span class="section-number">3. </span>An Informal Introduction to Python</a></p>
  1208. </div>
  1209. <div>
  1210. <h4>Next topic</h4>
  1211. <p class="topless"><a href="datastructures.html"
  1212. title="next chapter"><span class="section-number">5. </span>Data Structures</a></p>
  1213. </div>
  1214. <div role="note" aria-label="source link">
  1215. <h3>This Page</h3>
  1216. <ul class="this-page-menu">
  1217. <li><a href="../bugs.html">Report a Bug</a></li>
  1218. <li>
  1219. <a href="https://github.com/python/cpython/blob/main/Doc/tutorial/controlflow.rst"
  1220. rel="nofollow">Show Source
  1221. </a>
  1222. </li>
  1223. </ul>
  1224. </div>
  1225. </div>
  1226. <div id="sidebarbutton" title="Collapse sidebar">
  1227. <span>«</span>
  1228. </div>
  1229. </div>
  1230. <div class="clearer"></div>
  1231. </div>
  1232. <div class="related" role="navigation" aria-label="related navigation">
  1233. <h3>Navigation</h3>
  1234. <ul>
  1235. <li class="right" style="margin-right: 10px">
  1236. <a href="../genindex.html" title="General Index"
  1237. >index</a></li>
  1238. <li class="right" >
  1239. <a href="../py-modindex.html" title="Python Module Index"
  1240. >modules</a> |</li>
  1241. <li class="right" >
  1242. <a href="datastructures.html" title="5. Data Structures"
  1243. >next</a> |</li>
  1244. <li class="right" >
  1245. <a href="introduction.html" title="3. An Informal Introduction to Python"
  1246. >previous</a> |</li>
  1247. <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  1248. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  1249. <li class="switchers">
  1250. <div class="language_switcher_placeholder"></div>
  1251. <div class="version_switcher_placeholder"></div>
  1252. </li>
  1253. <li>
  1254. </li>
  1255. <li id="cpython-language-and-version">
  1256. <a href="../index.html">3.12.3 Documentation</a> &#187;
  1257. </li>
  1258. <li class="nav-item nav-item-1"><a href="index.html" >The Python Tutorial</a> &#187;</li>
  1259. <li class="nav-item nav-item-this"><a href=""><span class="section-number">4. </span>More Control Flow Tools</a></li>
  1260. <li class="right">
  1261. <div class="inline-search" role="search">
  1262. <form class="inline-search" action="../search.html" method="get">
  1263. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
  1264. <input type="submit" value="Go" />
  1265. </form>
  1266. </div>
  1267. |
  1268. </li>
  1269. <li class="right">
  1270. <label class="theme-selector-label">
  1271. Theme
  1272. <select class="theme-selector" oninput="activateTheme(this.value)">
  1273. <option value="auto" selected>Auto</option>
  1274. <option value="light">Light</option>
  1275. <option value="dark">Dark</option>
  1276. </select>
  1277. </label> |</li>
  1278. </ul>
  1279. </div>
  1280. <div class="footer">
  1281. &copy;
  1282. <a href="../copyright.html">
  1283. Copyright
  1284. </a>
  1285. 2001-2024, Python Software Foundation.
  1286. <br />
  1287. This page is licensed under the Python Software Foundation License Version 2.
  1288. <br />
  1289. Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
  1290. <br />
  1291. See <a href="/license.html">History and License</a> for more information.<br />
  1292. <br />
  1293. The Python Software Foundation is a non-profit corporation.
  1294. <a href="https://www.python.org/psf/donations/">Please donate.</a>
  1295. <br />
  1296. <br />
  1297. Last updated on Apr 09, 2024 (13:47 UTC).
  1298. <a href="/bugs.html">Found a bug</a>?
  1299. <br />
  1300. Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6.
  1301. </div>
  1302. </body>
  1303. </html>
上海开阖软件有限公司 沪ICP备12045867号-1