Is this PEP-able? (syntax for functools.partial-like functionality)

Ian Kelly ian.g.kelly at gmail.com
Tue Aug 20 05:11:41 EDT 2013


On Tue, Aug 20, 2013 at 2:28 AM, Fábio Santos <fabiosantosart at gmail.com> wrote:
> I do realize that syntax in python is practically written in stone, but I
> have seen changes come by if they have good reasons. For example,
> keyword-only argument syntax was added.
>
> I suggested this because I thought it would be the most practical way to
> create partial functions. Lambda is too verbose and kind of ugly, and its
> purpose is not to create partials, functools.partial does not allow argument
> "insertion" (the star thing) nor unpacking.

I think that if you're doing argument insertion, then your partial
application is overly complex in the way that it modifies the original
argspec.  You should be looking at it as a new function, not as a
partial application that prevents you from easily supplying a doc
string for it.  If you want to specify an arbitrary combination of
arguments in your partial application, you can already do that using
keyword arguments.  The exception would be if the function being
partially applied takes a *args argument and you want to specify some
of those arguments using partial without specifying earlier arguments.
 That seems like an abuse of partial application to me.

Tuple unpacking in function signatures was a feature in Python 2, and
it was intentionally removed in Python 3, so this is very unlikely to
happen.  See PEP 3113.  Besides which, the syntax you suggest for this
is unintuitive.

   spam_unpacking = spam{1, (*, *)}

To me, this reads that spam_unpacking will take two positional
arguments that will be packed into the second argument sent to spam
(b), and that the third argument to spam (c) is not specified here.  I
don't think that's what you intended.



More information about the Python-list mailing list