Feature Requests item #1706256, was opened at 2007-04-23 20:18
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=355470&aid=1706256&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Calvin Spealman (ironfroggy)
Assigned to: Nobody/Anonymous (nobody)
Summary: Give Partial the ability to skip positionals

Initial Comment:
There are some situations where you want to skip positional arguments in a use 
of a partial function. In other words, you want to create a partial that 
applies positional arguments out of order or without applying values to one or 
more lower positional arguments. In some cases keyword arguments can be used 
instead, but this has two obvious drawbacks. Firstly, it causes the caller to 
rely on the name of a positional in a callee, which breaks encapsulation. 
Secondly, on the case of the function being applied to being a builtin, it 
fails completely, as they will not take positional arguments by name at all. I 
propose a class attribute to the partial type, 'skip', which will be a 
singleton to pass to a partial object signifying this skipping of positionals. 
The following example demonstrates.

from functools import partial

def add(a, b):
    return a + b

append_abc = partial(add, partial.skip, "abc")
assert append_abc("xyz") == "xyzabc"

Obviously this example would break if used as partial(add, b="abc") and the 
maintainer of add changed the positional names to 'first' and 'second' or 'pre' 
and 'post', which is perfectly reasonable. We do not need to expect the names 
of our positional arguments are depended upon. It would also break when someone 
gets smart and replaces the add function with operator.add, of course.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=355470&aid=1706256&group_id=5470
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to