Note that there are some explanatory texts on larger screens.

plurals
  1. POCalling a Python function with *args,**kwargs and optional / default arguments
    primarykey
    data
    text
    <p>In python, I can define a function as follows:</p> <pre><code>def func(kw1=None,kw2=None,**kwargs): ... </code></pre> <p>In this case, i can call func as:</p> <pre><code>func(kw1=3,kw2=4,who_knows_if_this_will_be_used=7,more_kwargs=Ellipsis) </code></pre> <p>I can also define a function as:</p> <pre><code>def func(arg1,arg2,*args): ... </code></pre> <p>which can be called as</p> <pre><code>func(3,4,additional,arguments,go,here,Ellipsis) </code></pre> <p>Finally, I can combine the two forms</p> <pre><code>def func(arg1,arg2,*args,**kwargs): ... </code></pre> <p>But, what does not work is calling:</p> <pre><code>func(arg1,arg2,*args,kw1=None,kw2=None,**kwargs): #SYNTAX ERROR (in python 2 only, apparently this works in python 3) ... </code></pre> <p>My original thought was that this was probably because a function</p> <pre><code>def func(arg1,arg2,*args,kw1=None): ... </code></pre> <p>can be called as</p> <pre><code>func(1,2,3) #kw1 will be assigned 3 </code></pre> <p>So this would introduce some ambiguity as to whether 3 should be packed into args or kwargs. However, with python 3, there is the ability to specify keyword only arguments:</p> <pre><code>def func(a,b,*,kw=None): #can be called as func(1,2), func(1,2,kw=3), but NOT func(1,2,3) ... </code></pre> <p>With this, it seems that there is no syntactic ambiguity with:</p> <pre><code>def func(a,b,*args,*,kw1=None,**kwargs): ... </code></pre> <p>However, this still brings up a syntax error (tested with Python3.2). Is there a reason for this that I am missing? And, is there a way to get the behavior I described above (Having *args with default arguments) -- I know I can simulate that behavior by manipulating the kwargs dictionary inside the function.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload