<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif"><span class="gmail_default"></span>Moin,<br></div><div class="gmail_quote"><div dir="ltr"><div style="font-family:tahoma,sans-serif"><div class="gmail_default" style="font-family:tahoma,sans-serif"></div></div><div style="font-family:tahoma,sans-serif"><span class="gmail_default" style="font-family:tahoma,sans-serif"></span>also das Tutorial warnt wirklich ausdrücklich:<br><div class="gmail_default" style="font-family:tahoma,sans-serif"></div></div><div style="font-family:tahoma,sans-serif"><strong style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px;text-align:justify">Important warning:</strong><span style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px;text-align:justify"> </span><span style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px;text-align:justify">The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls:</span><br></div><div style="font-family:tahoma,sans-serif"><div style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px"><div style="background:rgb(238,255,204)"><pre style="overflow:auto hidden;padding:5px;color:rgb(51,51,51);line-height:18.528px;border:1px solid rgb(170,204,153);font-family:monospace,sans-serif;font-size:15.44px;border-radius:3px"><span style="color:rgb(0,112,32);font-weight:bold">def</span> <span style="color:rgb(6,40,126)">f</span><span>(</span><span>a</span><span>,</span> <span>L</span><span style="color:rgb(102,102,102)">=</span><span>[]):</span>
    <span>L</span><span style="color:rgb(102,102,102)">.</span><span>append</span><span>(</span><span>a</span><span>)</span>
    <span style="color:rgb(0,112,32);font-weight:bold">return</span> <span>L</span>

<span style="color:rgb(0,112,32)">print</span><span>(</span><span>f</span><span>(</span><span style="color:rgb(32,128,80)">1</span><span>))</span>
<span style="color:rgb(0,112,32)">print</span><span>(</span><span>f</span><span>(</span><span style="color:rgb(32,128,80)">2</span><span>))</span>
<span style="color:rgb(0,112,32)">print</span><span>(</span><span>f</span><span>(</span><span style="color:rgb(32,128,80)">3</span><span>))</span>
</pre></div></div><p style="text-align:justify;line-height:22.4px;font-family:"Lucida Grande",Arial,sans-serif;font-size:16px">This will print</p><div style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px"><div style="background:rgb(238,255,204)"><pre style="overflow:auto hidden;padding:5px;color:rgb(51,51,51);line-height:18.528px;border:1px solid rgb(170,204,153);font-family:monospace,sans-serif;font-size:15.44px;border-radius:3px"><span>[</span><span style="color:rgb(32,128,80)">1</span><span>]</span>
<span>[</span><span style="color:rgb(32,128,80)">1</span><span>,</span> <span style="color:rgb(32,128,80)">2</span><span>]</span>
<span>[</span><span style="color:rgb(32,128,80)">1</span><span>,</span> <span style="color:rgb(32,128,80)">2</span><span>,</span> <span style="color:rgb(32,128,80)">3</span><span>]</span></pre></div></div></div><div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr"><div><font face="tahoma, sans-serif">flake8</font>(3.7.9) <font face="tahoma, sans-serif">hat da wohl kein Problem mit. Und vor zwei Jahren darauf angesprochen sah man wohl keinen großen Bedarf das zu erkennen (</font><a href="https://gitlab.com/pycqa/flake8/issues/386#note_45347918" target="_blank">https://gitlab.com/pycqa/flake8/issues/386#note_45347918</a>).</div><div>Benutzt man das flake8 plugin bugbear, dann bekommt man aber folgende aussagekräftige Warnung:</div><div><br></div><div>





<p style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:14px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">doodoo.py:1:16: B006 Do not use mutable data structures for argument defaults.<span>  </span>They are created during function definition time. All calls to the function reuse this one instance of that data structure, persisting changes between them.</span></p><p style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:14px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><br></p></div><div><span style="font-family:tahoma,sans-serif">pylint gibt einem aus dem Stand (u.a.) folgende Warnung aus:</span><br></div><div style="font-family:tahoma,sans-serif"><br></div><div style="font-family:tahoma,sans-serif">





<p style="margin:0px;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:14px;line-height:normal;font-family:Menlo;color:rgb(0,0,0)"><span style="font-variant-ligatures:no-common-ligatures">doodoo.py:1:0: W0102: Dangerous default value [] as argument (dangerous-default-value)</span></p></div><div style="font-family:tahoma,sans-serif"></div><div style="font-family:tahoma,sans-serif">Zu Keyword-Only Arguments (<a href="https://www.python.org/dev/peps/pep-3102/" style="font-family:Arial,Helvetica,sans-serif" target="_blank">https://www.python.org/dev/peps/pep-3102/</a>)</div><div style="font-family:tahoma,sans-serif"><br></div><div style="font-family:tahoma,sans-serif"><pre style="box-sizing:border-box;margin-top:0px;margin-bottom:1.3125em;padding:1em;border:1px solid rgb(221,221,221);font-variant-numeric:inherit;font-variant-east-asian:inherit;font-stretch:inherit;font-size:15px;line-height:1.875;font-family:Consolas,"Lucida Console","Liberation Mono","DejaVu Sans Mono","Bitstream Vera Sans Mono","Courier New",monospace,sans-serif;vertical-align:baseline;white-space:pre-wrap;background-image:inherit;background-position:inherit;background-size:inherit;background-repeat:inherit;background-origin:inherit;background-clip:inherit;background-color:rgb(230,232,234);color:rgb(68,68,68)">def compare(a, b, *, key=None):</pre></div><div style="font-family:tahoma,sans-serif">gibt es wohl ab python 3.8 auch die Entsprechung zy Positional-Only Parameters (<a href="https://www.python.org/dev/peps/pep-0570/" style="font-family:Arial,Helvetica,sans-serif" target="_blank">https://www.python.org/dev/peps/pep-0570/</a> oder besser erklärt in <a href="https://docs.python.org/3/whatsnew/3.8.html#positional-only-parameters" target="_blank">https://docs.python.org/3/whatsnew/3.8.html#positional-only-parameters</a>)</div><div style="font-family:tahoma,sans-serif"><div style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px"><div style="background:rgb(238,255,204)"><pre style="overflow:auto hidden;padding:5px;color:rgb(51,51,51);line-height:18.528px;border:1px solid rgb(170,204,153);font-family:monospace,sans-serif;font-size:15.44px;border-radius:3px"><span style="color:rgb(0,112,32);font-weight:bold">def</span> <span style="color:rgb(6,40,126)">f</span><span>(</span><span>a</span><span>,</span> <span>b</span><span>,</span> <span style="color:rgb(102,102,102)">/</span><span>,</span> <span>c</span><span>,</span> <span>d</span><span>,</span> <span style="color:rgb(102,102,102)">*</span><span>,</span> <span>e</span><span>,</span> <span>f</span><span>):</span>
    <span style="color:rgb(0,112,32)">print</span><span>(</span><span>a</span><span>,</span> <span>b</span><span>,</span> <span>c</span><span>,</span> <span>d</span><span>,</span> <span>e</span><span>,</span> <span>f</span><span>)</span>
</pre></div></div><p style="text-align:justify;line-height:22.4px;font-family:"Lucida Grande",Arial,sans-serif;font-size:16px">The following is a valid call:</p><div style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px"><div style="background:rgb(238,255,204)"><pre style="overflow:auto hidden;padding:5px;color:rgb(51,51,51);line-height:18.528px;border:1px solid rgb(170,204,153);font-family:monospace,sans-serif;font-size:15.44px;border-radius:3px"><span>f</span><span>(</span><span style="color:rgb(32,128,80)">10</span><span>,</span> <span style="color:rgb(32,128,80)">20</span><span>,</span> <span style="color:rgb(32,128,80)">30</span><span>,</span> <span>d</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">40</span><span>,</span> <span>e</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">50</span><span>,</span> <span>f</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">60</span><span>)</span>
</pre></div></div><p style="text-align:justify;line-height:22.4px;font-family:"Lucida Grande",Arial,sans-serif;font-size:16px">However, these are invalid calls:</p><div style="font-family:"Lucida Grande",Arial,sans-serif;font-size:16px"><div style="background:rgb(238,255,204)"><pre style="overflow:auto hidden;padding:5px;color:rgb(51,51,51);line-height:18.528px;border:1px solid rgb(170,204,153);font-family:monospace,sans-serif;font-size:15.44px;border-radius:3px"><span>f</span><span>(</span><span style="color:rgb(32,128,80)">10</span><span>,</span> <span>b</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">20</span><span>,</span> <span>c</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">30</span><span>,</span> <span>d</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">40</span><span>,</span> <span>e</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">50</span><span>,</span> <span>f</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">60</span><span>)</span>   <span style="color:rgb(64,128,144);font-style:italic"># b cannot be a keyword argument</span>
<span>f</span><span>(</span><span style="color:rgb(32,128,80)">10</span><span>,</span> <span style="color:rgb(32,128,80)">20</span><span>,</span> <span style="color:rgb(32,128,80)">30</span><span>,</span> <span style="color:rgb(32,128,80)">40</span><span>,</span> <span style="color:rgb(32,128,80)">50</span><span>,</span> <span>f</span><span style="color:rgb(102,102,102)">=</span><span style="color:rgb(32,128,80)">60</span><span>)</span>           <span style="color:rgb(64,128,144);font-style:italic"># e must be a keyword argument</span></pre></div></div></div><div style="font-family:tahoma,sans-serif"><span class="gmail_default"></span><span style="font-family:Arial,Helvetica,sans-serif">V</span><span class="gmail_default"></span><span style="font-family:Arial,Helvetica,sans-serif">iele Grüße,</span></div></div><div dir="ltr"><div> Alex<span class="gmail_default" style="font-family:tahoma,sans-serif"></span><span class="gmail_default" style="font-family:tahoma,sans-serif"></span></div></div></div></div></div>
</div></div>