<div dir="auto"><div dir="auto">Currently if one wants to provide positional arguments after keyword arguments, it's not possible, one must begin with positional arguments [1] or <span style="font-family:sans-serif">use keyword arguments [2] :</span></div><div dir="auto"><br></div><div dir="auto">```</div><div dir="auto">def f(x, *, long_name='foo'): return ...</div><div dir="auto"><br></div><div dir="auto">f(2, long_name='bar')  # [1]</div><div dir="auto">f(long_name='bar', x=2)  # [2]</div><div dir="auto">```</div><div dir="auto"><br></div><div dir="auto">The problem is that it's not always possible to do so because some functions cannot have keyword arguments (because they call a C function) like math.hypot :</div><div dir="auto"><br></div><div dir="auto">```</div><div dir="auto">import math</div><div dir="auto">math.hypot(y=5, x=2)  # TypeError</div><div dir="auto">```</div><div dir="auto"><br></div><div dir="auto">A solution is to use partial.</div><div dir="auto"><br></div><div dir="auto">```</div><div dir="auto">from functools import partial</div><div dir="auto">partial(f, long_name='bar')(2)</div><div dir="auto">```</div><div dir="auto"><br></div><div dir="auto">But that begins to be "functional programming style" and that doesn't solve the case where one would like to change the order of (I created funcoperators.elipartial for that reason) :</div><div dir="auto"><br></div><div dir="auto">```</div><div dir="auto">from funcoperators import elipartial</div><div dir="auto">elipartial(math.hypot, ..., 5)(2)</div><div dir="auto">```</div><div dir="auto"><br></div><div dir="auto">Of course one could create a tuple and a dict they call f(*a, **k) but cannot be used inside an expression.</div><div dir="auto"><br></div><div dir="auto">```</div><div dir="auto">k = dict(long_name='bar')</div><div dir="auto">a = (2, )</div><div dir="auto">f(*a, **k)</div><div dir="auto">```</div><div dir="auto"><br></div><div dir="auto">So what would be a good new syntax for that or workaround I didn't think of ?</div><div dir="auto"><br></div><div dir="auto">```</div><div dir="auto">f(**dict(long_name='bar'), *(2, ))</div><div dir="auto"><br></div><div dir="auto">f(long_name='bar', 0=2)</div><div dir="auto">math.hypot(0=5, 1=2)</div><div dir="auto"><br></div><div dir="auto"><span style="font-family:sans-serif">f(long_name='bar', args[0]=2)</span><br></div><div dir="auto"><span style="font-family:sans-serif">math.hypot(args[0]=5, args[1]=2)</span><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif"><br></span></div><div dir="auto"><span style="font-family:sans-serif">...</span></div><div dir="auto">```</div><div dir="auto"><br></div>I don't know if such an idea has been asked before (I don't know how to formulate it).<br><br><div data-smartmail="gmail_signature"><a href="http://robertvandeneynde.be" target="_blank" rel="noreferrer">robertvandeneynde.be</a></div></div>