<div dir="ltr"><div><span style="line-height:1.5">Well, partial </span><span style="line-height:1.5">+ apply seems like the most powerful solution (supports **keywords, opens up the possibility of using apply in other ways). Perhaps adding apply back to functools rather than as a builtin would evade some of the antipatterns it used to encourage (a la reduce). I'm not sure and don't have a strong opinion about the original removal of apply.</span><br></div><div><br></div><div>Alternatively a form of "starcaller" or "unpackcaller" defined roughly as partial(apply) could be added to the operator module in the capacity I proposed above. The only possible advantage here is aesthetic; it fits conceptually with the rest of the module as a callable capturing a repeatable operation that is normally only possible with special syntax. It also disallows using apply in "non-curried" contexts.</div><div><br></div><div>Thanks,</div><div>Dan<br><br>PS.</div><div>Emanuel, my use case is one where I am creating data transformations by composing chains of function calls. The functions are executed in parallel across multiple processes. Specifically I'm using the <a href="https://distributed.readthedocs.io/en/latest/">Dask Distributed</a> library.<br><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 21, 2016 at 11:51 AM Emanuel Barry <<a href="mailto:vgr255@live.ca" target="_blank">vgr255@live.ca</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">> From: Nick Coghlan<br>
> Sent: Thursday, July 21, 2016 11:21 AM<br>
><br>
> On 22 July 2016 at 00:19, Emanuel Barry <<a href="mailto:vgr255@live.ca" target="_blank">vgr255@live.ca</a>> wrote:<br>
> > Hello,<br>
> ><br>
> > You’re presumably doing something like ‘star = starcaller(f); star((“foo”,<br>
> > “bar”, “baz”))’ – how is it different from ‘f(*(“foo”, “bar”, “baz”))’ ? I<br>
> > don’t see any difference…<br>
><br>
> Similar to functools.partial, it lets you more easily separate the<br>
> process of changing a function's signature from actually calling it.<br>
><br>
> Compare:<br>
><br>
>     def f(a, b):<br>
>         print(a, b)<br>
><br>
>     accepts_only_b = functools.partial(f, "predefined_a")<br>
>     accepts_args_as_tuple = operator.starcaller(f)<br>
<br>
Ah, of course - I didn't think of the multiple arguments case, thanks :)<br>
<br>
-Emanuel<br>
</blockquote></div></div></div>