【发布时间】:2016-12-20 13:57:50
【问题描述】:
我有一个利用Python函数的一流特性定义的函数,如下:
add_relative = np.frompyfunc(lambda a, b: (1 + a) * (1 + b) - 1, 2, 1)
要么我需要一种方法将文档字符串添加到按原样定义的函数中,要么使用更常见的格式实现相同的目的,以便我可以以正常方式编写文档字符串:
def add_relative(a, b):
"""
Docstring
"""
return np.frompyfunc(lambda a, b: (1 + a) * (1 + b) - 1, 2, 1)(a, b)
当函数被调用时起作用
add_relative(arr1, arr2)
然后我就失去了调用方法的能力,例如
add_relative.accumulate(foo_arr, dtype=np.object)
我猜这是因为使用frompyfunc 时,该函数变得更像一个类,派生自ufunc。
我想我可能需要定义一个类,而不是一个函数,但我不确定如何。我会同意的,因为这样我就可以像往常一样轻松添加文档字符串。
我标记了这个coding-style,因为原始方法有效,但无法轻易记录,如果标题不清楚,我很抱歉,我不知道描述这个的正确词汇。
【问题讨论】:
-
我想应该注意的是,第一种方式定义的函数确实带有一个文档字符串,但我希望添加我自己的/覆盖它(
add_relative.__doc__ = 'string'不可能)。 -
不幸的是,不能定义一个以
numpy.ufunc为基类的类。这样做会引发错误TypeError: type 'numpy.ufunc' is not an acceptable base type。当初始函数定义完美执行时,我真的不想为了能够添加文档字符串而从头开始编写整个函数。 -
一般来说,以初始方式定义的函数的文档字符串可以通过分配给
__doc__属性来更新,但这在这里不合适,因为该属性对于numpy.ufunc是不可变的。
标签: python coding-style docstring first-class-functions numpy-ufunc