Hacker News new | ask | show | jobs
by wrmsr 2111 days ago
As far as I can tell functools.partial has been implemented in C since it was added sixteen years ago ( https://github.com/python/cpython/commit/9c323f8de4910dfc0ba... ), and it's faster than lambda ( https://gist.github.com/wrmsr/1e13eda3ed78288679c010acbe6d2b... ). Regarding docstrings you can access the underlying function via the __wrapped__ attribute, and signature forwarding is too brittle and magical for stdlib.
1 comments

> As far as I can tell functools.partial has been implemented in C since it was added sixteen years ago ( https://github.com/python/cpython/commit/9c323f8de4910dfc0ba.... ), and it's faster than lambda ( https://gist.github.com/wrmsr/1e13eda3ed78288679c010acbe6d2b.... )

I tried to prove you wrong and run multiple tests that all shown you were right. Then I tried to run them on different python versions, down to Python 2.7, expecting that my knowledge was just dated.

No, I was just wrong.

Don't know why I was so convinced of this.

> Regarding docstrings you can access the underlying function via the __wrapped__ attribute,

This assumes one knows about that. A lot of people never even heard of partial(), and won't know about _ _wrapped_ _. Not to mention I never seen a tool using help() fetching _ _wrapped_ _._ _doc_ _ if it exists.

> and signature forwarding is too brittle and magical for stdlib.

@functools.wraps() does signature forwarding to great success, and is in the stdlib.

Nevertheless, I don't think it would be the right strategy for partial(), because you don't have the exact same signature. But at least having something like:

   This function is the result of x() being wrapped with partial(x, 1, foo='bar').

   Here is the original docstring of x():
   
    ....