如何在Python文档字符串中定义"可调用"参数?

Chr*_* W. 10 python documentation types docstring function-declaration

考虑一下filterNot(基本上与之相反filter)的实现:

def filterNot(f, sequence):
    return filter(lambda x: not f(x), sequence)
Run Code Online (Sandbox Code Playgroud)

参数f可以是"函数"或"方法"或lambda- 甚至是类定义的对象__call__.

现在考虑一下这个参数的docstring行:

:param ??? f: Should return True for each element to be abandoned
Run Code Online (Sandbox Code Playgroud)

现在,应该取代什么- 如何在docstring中引用参数类型f.callable是显而易见的选择(如果我发号施令,我会指示:P)但是有没有既定的惯例?

Gar*_*tty 10

是的,可调用术语是在这里使用的术语.

抽象基类Callable存在于collections.abc- 抽象基类可以最好地被视为接口(例如,更像是Go中的动态基类,而不是Java中的那些) - 它们定义了一个接口,并且定义了具有给定函数的任何类继承自那个抽象基类(无论它们是否明确地这样做) - 这意味着你将有用地传递给像这样的函数的任何东西都是它的子类Callable,这使得这个术语的使用完全正确.就像你可能会说的那样Iterable.

它绝对是大多数人在非正式地讨论Python代码时使用的术语,任何阅读代码的人都应该理解你的意思.

callable()内置的(即得到了在3.X一会儿取出,然后重新添加)确实为功能状物体的检查,这进一步强化了名,你正在寻找的功能状物体的最佳选择.