扩展函数与“帮助”

1 投票
2 回答
147 浏览
提问于 2025-04-11 09:32

当我调用

help(Mod.Cls.f)

(Mod是一个C扩展模块),我得到的输出是

Help on method_descriptor:

f(...)
    doc_string

我需要做些什么,才能让帮助输出的格式像这样

Help on method f in module Mod:

f(x, y, z)
    doc_string

比如说random.Random.shuffle的格式?

我现在的PyMethodDef条目是:

{ "f", f, METH_VARARGS, "doc_string" }

2 个回答

1

托马斯的回答当然是正确的。

我想补充一点,很多C语言的扩展模块外面都有一个Python的“包装”,这样它们就能支持标准的函数格式和其他动态语言的一些特性(比如描述符协议)。

2

你不能这样做。inspect模块,也就是'pydoc'和'help()'使用的那个模块,无法准确知道一个C语言函数的具体参数是什么。你能做的最好的办法,就是像内置函数那样:把函数的参数信息放在文档字符串的第一行:

>>> help(range)
Help on built-in function range in module __builtin__:

range(...)
    range([start,] stop[, step]) -> list of integers

...

random.shuffle的文档字符串看起来“正确”的原因是,因为它不是一个C语言函数,而是用Python写的函数。

撰写回答