New submission from Alexander Belopolsky <alexander.belopol...@gmail.com>:

Currently applying functools.partial to a callable that is already 
functools.partial object results in a nested object:

>>> from functools import partial
>>> def f(a,b,c): pass
... 
>>> p = partial(partial(f, 1), 2)
>>> p.func, p.args
(<functools.partial object at 0x100431d60>, (2,))


Proposed patch makes partial(partial(f, 1), 2) return partial(f, 1, 2) instead:
>>> p.func, p.args
(<function f at 0x10055d3a8>, (1, 2))

This patch is partially (no pun intended) motivated by a patch submitted by 
Christophe Simonis for issue4331. Christophe's patch flattens nested partials 
for a specific case of using partials as bound methods.

As proposed, the patch will enable flattening for subclasses of 
functools.partial, but will return a baseclass instance.  Flattening will also 
discard any state attached to the nested partial such as __name__, __doc__, etc 
or any subclass data.  I believe this is the right behavior, but this caveat is 
the reason I classify this patch as a "feature request" rather than 
"performance" or "resource usage".

----------
components: Library (Lib)
files: no-nested-partial.diff
keywords: patch
messages: 98674
nosy: Alexander.Belopolsky
severity: normal
status: open
title: Flatten nested functools.partial
type: feature request
versions: Python 2.7, Python 3.2
Added file: http://bugs.python.org/file16083/no-nested-partial.diff

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue7830>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to