<br><br><div><span class="gmail_quote">On 3/1/07, <b class="gmail_sendername">Raymond Hettinger</b> &lt;<a href="mailto:raymond.hettinger@verizon.net">raymond.hettinger@verizon.net</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
What we have now:<br>&nbsp;&nbsp;&nbsp;&nbsp;def f(a, b, *args, **dict(c=1)):&nbsp;&nbsp;&nbsp;&nbsp; # Yuck!<br><br>What we really need:<br>&nbsp;&nbsp;&nbsp;&nbsp;def f(a, b, *args, **, c=1):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Two stars spell dictionary.<br><br>What I heard was planned instead:<br>&nbsp;&nbsp;&nbsp;&nbsp;def f(a, b, *args, *, c=1):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # One star spells iterable.
</blockquote><div><br>Nope. You can only have one one-star and one two-star. If you want keyword-only arguments *and* arbitrary positional arguments, you can just do it (in Py3k, and it will probably be backported to 2.6.)
<br><br>&nbsp;&gt;&gt;&gt; def foo(a, b, *args, c=1): return a, b, args, c<br>...<br>&gt;&gt;&gt; foo(1, 2)<br>(1, 2, (), 1)<br>&gt;&gt;&gt; foo(1, 2, 3, 4, c=5)<br>(1, 2, (3, 4), 5)<br><br></div></div>The one-star-only syntax is only if you *don&#39;t* want arbitrary positional arguments:
<br><br clear="all">&gt;&gt;&gt; def foo(a, b, *, c=1): return a, b, c<br>...<br>&gt;&gt;&gt; foo(1, 2)<br>(1, 2, 1)<br>&gt;&gt;&gt; foo(1, 2, 5)<br>Traceback (most recent call last):<br>&nbsp; File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
<br>TypeError: foo() takes exactly 2 positional arguments (3 given)<br>&gt;&gt;&gt; foo(1, 2, c=5)<br>(1, 2, 5)<br><br>-- <br>Thomas Wouters &lt;<a href="mailto:thomas@python.org">thomas@python.org</a>&gt;<br><br>Hi! I&#39;m a .signature virus! copy me into your .signature file to help me spread!