[Python-Dev] Possible patch for functools partial - Interested?
Steven D'Aprano
steve at pearwood.info
Thu May 13 13:30:29 CEST 2010
On Thu, 13 May 2010 06:50:02 pm Yaniv Aknin wrote:
> I'm never certain where to reply in such a case, on the list or on
> the issue, but since no one is nosy yet to Daniel's patch, I thought
> I'd ask here.
>
> While a partial object should reasonably never change, you could
change it:
[...]
> I realize touching p.keywords voids your warranty, but if we can stop
> people from doing it, maybe we should (or at least put a warning in
> the documentation, no?).
Modifying partial.keywords will almost certainly effect hashing, so I
think this is relevant to the patch.
> So I'm thinking either we make an
> immutable/hashable dict while we're at it, or store the keyword
> arguments as a tuple (which guarantees immutability), and only
> convert them back to a dict when you want to call the partial object
> (simpler, slower).
I'd support an immutable dict. partial objects already impose a
significant (~ 30%) performance penalty:
>>> from timeit import Timer
>>> min(Timer('f(5)', 'f = lambda x: x').repeat())
0.93580079078674316
>>> min(Timer('p(5)', 'from functools import partial; p = partial(lambda
x: x)').repeat())
1.2715129852294922
No need to make that worse if that can be avoided.
--
Steven D'Aprano
More information about the Python-Dev
mailing list