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的部分应用程序?
正如@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)