|
5 | 5 | <link href="https://learnbyexample.github.io/atom.xml" rel="self" type="application/atom+xml"/>
|
6 | 6 | <link href="https://learnbyexample.github.io"/>
|
7 | 7 | <generator uri="https://www.getzola.org/">Zola</generator>
|
8 |
| - <updated>2022-10-18T00:00:00+00:00</updated> |
| 8 | + <updated>2022-10-26T00:00:00+00:00</updated> |
9 | 9 | <id>https://learnbyexample.github.io/atom.xml</id>
|
| 10 | + <entry xml:lang="en"> |
| 11 | + <title>Python tip 18: arbitrary number of arguments</title> |
| 12 | + <published>2022-10-26T00:00:00+00:00</published> |
| 13 | + <updated>2022-10-26T00:00:00+00:00</updated> |
| 14 | + <link rel="alternate" href="https://learnbyexample.github.io/tips/python-tip-18/" type="text/html"/> |
| 15 | + <id>https://learnbyexample.github.io/tips/python-tip-18/</id> |
| 16 | + <content type="html"><p>The <code>print()</code> function can accept zero or more values separated by a comma. Here's how the function arguments are shown in <code>help(print)</code>:</p> |
| 17 | +<pre data-lang="python" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#b39f04;">print</span><span>(value, </span><span style="color:#b3933a;">...</span><span>, </span><span style="color:#5597d6;">sep</span><span style="color:#72ab00;">=</span><span style="color:#d07711;">&#39; &#39;</span><span>, </span><span style="color:#5597d6;">end</span><span style="color:#72ab00;">=</span><span style="color:#d07711;">&#39;</span><span style="color:#aeb52b;">\n</span><span style="color:#d07711;">&#39;</span><span>, </span><span style="color:#5597d6;">file</span><span style="color:#72ab00;">=</span><span>sys.stdout, </span><span style="color:#5597d6;">flush</span><span style="color:#72ab00;">=</span><span style="color:#b3933a;">False</span><span>) |
| 18 | +</span></code></pre> |
| 19 | +<p>Here are some examples with varying number of arguments passed to the <code>print()</code> function:</p> |
| 20 | +<pre data-lang="python" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#b39f04;">print</span><span>() |
| 21 | +</span><span> |
| 22 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#b39f04;">print</span><span>(</span><span style="color:#d07711;">&#39;hello&#39;</span><span>) |
| 23 | +</span><span>hello |
| 24 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#b39f04;">print</span><span>(</span><span style="color:#b3933a;">42</span><span>, </span><span style="color:#b3933a;">22</span><span style="color:#72ab00;">/</span><span style="color:#b3933a;">7</span><span>, </span><span style="color:#72ab00;">-</span><span style="color:#b3933a;">100</span><span>) |
| 25 | +</span><span style="color:#b3933a;">42 3.142857142857143 </span><span style="color:#72ab00;">-</span><span style="color:#b3933a;">100 |
| 26 | +</span></code></pre> |
| 27 | +<p>You can write your own functions to accept arbitrary number of arguments as well. The packing syntax is similar to <a href="https://learnbyexample.github.io/tips/python-tip-14/">sequence unpacking</a>. A <code>*</code> prefix to an argument name will allow it to accept zero or more values. Such an argument will be packed as a <code>tuple</code> data type and it should always be specified after positional arguments (if any). <code>args</code> is often used as the variable name for this purpose. Here's an example:</p> |
| 28 | +<pre data-lang="python" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="background-color:#562d56bf;color:#f8f8f8;">def</span><span> </span><span style="color:#5597d6;">many</span><span>(x, </span><span style="color:#72ab00;">*</span><span>args): |
| 29 | +</span><span style="color:#b3933a;">... </span><span style="color:#b39f04;">print</span><span>(</span><span style="color:#668f14;">f</span><span style="color:#d07711;">&#39;</span><span>{x = }</span><span style="color:#d07711;">; </span><span>{args = }</span><span style="color:#d07711;">&#39;</span><span>) |
| 30 | +</span><span style="color:#b3933a;">... |
| 31 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">many</span><span>() |
| 32 | +</span><span style="color:#5597d6;">Traceback </span><span>(most recent call last): |
| 33 | +</span><span> File </span><span style="color:#d07711;">&quot;&lt;stdin&gt;&quot;</span><span>, line </span><span style="color:#b3933a;">1</span><span>, </span><span style="color:#72ab00;">in &lt;</span><span>module</span><span style="color:#72ab00;">&gt; |
| 34 | +</span><span style="color:#a2a001;">TypeError</span><span>: </span><span style="color:#5597d6;">many</span><span>() missing </span><span style="color:#b3933a;">1 </span><span>required positional argument: </span><span style="color:#d07711;">&#39;x&#39; |
| 35 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">many</span><span>(</span><span style="color:#b3933a;">1</span><span>) |
| 36 | +</span><span>x </span><span style="color:#72ab00;">= </span><span style="color:#b3933a;">1</span><span>; args </span><span style="color:#72ab00;">= </span><span>() |
| 37 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">many</span><span>(</span><span style="color:#b3933a;">1</span><span>, </span><span style="color:#d07711;">&#39;two&#39;</span><span>, </span><span style="color:#b3933a;">3</span><span>) |
| 38 | +</span><span>x </span><span style="color:#72ab00;">= </span><span style="color:#b3933a;">1</span><span>; args </span><span style="color:#72ab00;">= </span><span>(</span><span style="color:#d07711;">&#39;two&#39;</span><span>, </span><span style="color:#b3933a;">3</span><span>) |
| 39 | +</span></code></pre> |
| 40 | +<p>Here's a more practical example:</p> |
| 41 | +<pre data-lang="python" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-python "><code class="language-python" data-lang="python"><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="background-color:#562d56bf;color:#f8f8f8;">def</span><span> </span><span style="color:#5597d6;">sum_nums</span><span>(</span><span style="color:#72ab00;">*</span><span>args): |
| 42 | +</span><span style="color:#b3933a;">... </span><span>total </span><span style="color:#72ab00;">= </span><span style="color:#b3933a;">0 |
| 43 | +</span><span style="color:#b3933a;">... </span><span style="color:#72ab00;">for </span><span>n </span><span style="color:#72ab00;">in </span><span>args: |
| 44 | +</span><span style="color:#b3933a;">... </span><span>total </span><span style="color:#72ab00;">+= </span><span>n |
| 45 | +</span><span style="color:#b3933a;">... </span><span style="color:#72ab00;">return </span><span>total |
| 46 | +</span><span style="color:#b3933a;">... |
| 47 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">sum_nums</span><span>() |
| 48 | +</span><span style="color:#b3933a;">0 |
| 49 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">sum_nums</span><span>(</span><span style="color:#b3933a;">3</span><span>, </span><span style="color:#72ab00;">-</span><span style="color:#b3933a;">8</span><span>) |
| 50 | +</span><span style="color:#72ab00;">-</span><span style="color:#b3933a;">5 |
| 51 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">sum_nums</span><span>(</span><span style="color:#b3933a;">1</span><span>, </span><span style="color:#b3933a;">2</span><span>, </span><span style="color:#b3933a;">3</span><span>, </span><span style="color:#b3933a;">4</span><span>, </span><span style="color:#b3933a;">5</span><span>) |
| 52 | +</span><span style="color:#b3933a;">15 |
| 53 | +</span><span style="color:#72ab00;">&gt;&gt;&gt; </span><span style="color:#5597d6;">sum_nums</span><span>(</span><span style="color:#72ab00;">*</span><span style="color:#b39f04;">range</span><span>(</span><span style="color:#b3933a;">1</span><span>, </span><span style="color:#b3933a;">6</span><span>)) |
| 54 | +</span><span style="color:#b3933a;">15 |
| 55 | +</span></code></pre> |
| 56 | +<p><img src="/images/info.svg" alt="info" /> Use <code>**</code> prefix to accept arbitrary number of keyword arguments. See also <a href="https://docs.python.org/3/tutorial/controlflow.html#arbitrary-argument-lists">docs.python: Arbitrary Argument Lists</a>.</p> |
| 57 | +<p><strong>Video demo</strong>:</p> |
| 58 | +<p align="center"><iframe width="560" height="315" loading="lazy" src="https://www.youtube.com/embed/kp0TQgguiBI" title="YouTube video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p> |
| 59 | +<br> |
| 60 | +<p><img src="/images/info.svg" alt="info" /> See also my <a href="https://github.com/learnbyexample/100_page_python_intro">100 Page Python Intro</a> ebook.</p> |
| 61 | +</content> |
| 62 | + </entry> |
10 | 63 | <entry xml:lang="en">
|
11 | 64 | <title>Vim tip 16: terminal mode</title>
|
12 | 65 | <published>2022-10-18T00:00:00+00:00</published>
|
|
0 commit comments