部分函数应用程序与Python中的原始docstring?

Dra*_*uan 3 python partial-application

对于部分功能应用,我知道在Python中有几种方法可以做到这一点.但是,他们似乎不保留原始函数的docstring.

functools.partial为例:

from functools import partial

def foo(a, b, c=1):
    """Return (a+b)*c."""
    return (a+b)*c

bar10_p = partial(foo, b=10)
print bar10_p.__doc__

partial(func, *args, **keywords) - new function with partial application 
of the given arguments and keywords.
Run Code Online (Sandbox Code Playgroud)

我们试试fn.py:

from fn import F

def foo(a, b, c=1):
    """Return (a+b)*c."""
    return (a+b)*c

bar10_F = F(foo, b=10)
print bar10_F.__doc__

Provide simple syntax for functions composition
(through << and >> operators) and partial function
application (through simple tuple syntax).

Usage example:

>>> func = F() << (_ + 10) << (_ + 5)
>>> print(func(10))
25
>>> func = F() >> (filter, _ < 6) >> sum
>>> print(func(range(10)))
15
Run Code Online (Sandbox Code Playgroud)

是否有任何Python包/模块提供保留docstring的部分应用程序?

UPDATE

正如@Kevin@Martijn Pieters所提到的,函数签名已经改变,因此不建议坚持使用原始函数的docstring.我意识到我正在寻找一个类似的更新文档字符串foo() with a default b value of 10(感谢Kevin简单但直接的例子.).

Mar*_*ers 10

__doc__partial物体和功能上都是可写的; 只需复制它:

bar10_p = partial(foo, b=10)
bar10_p.__doc__ = func.__doc__
Run Code Online (Sandbox Code Playgroud)

或使用该functools.update_wrapper()功能为您进行复制; 它也会为你复制一些其他的元数据:

from functools import update_wrapper

bar10_p = partial(foo, b=10)
update_wrapper(bar10_p, foo)
Run Code Online (Sandbox Code Playgroud)