Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扩展函数和';帮助';_Python_Cpython - Fatal编程技术网

Python 扩展函数和';帮助';

Python 扩展函数和';帮助';,python,cpython,Python,Cpython,当我打电话时 help(Mod.Cls.f) (Mod是一个C扩展模块),我得到了输出 Help on method_descriptor: f(...) doc_string 你不能。“pydoc”和“help()”使用的inspect模块无法确定C函数的确切签名是什么。您所能做的最好的事情是内置函数所做的:在docstring的第一行包括签名: >>> help(range) Help on built-in function range in module _

当我打电话时

help(Mod.Cls.f)
(Mod是一个C扩展模块),我得到了输出

Help on method_descriptor: f(...) doc_string
你不能。“pydoc”和“help()”使用的inspect模块无法确定C函数的确切签名是什么。您所能做的最好的事情是内置函数所做的:在docstring的第一行包括签名:

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

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

...

random.shuffle的docstring看起来“正确”的原因是它不是一个C函数。这是一个用Python编写的函数。

托马斯的答案当然是正确的


我只想补充一点,许多C扩展模块周围都有一个Python“包装器”,这样它们就可以支持标准函数签名和其他动态语言功能(如描述符协议)。

谢谢,但是为什么它会说method_descriptor而不是方法和模块的名称呢?因为Python认为对象就是这样的——因为它就是这样的。请参阅“帮助(list.append)”,您将看到相同的内容。啊,我明白了。。。帮助(list.sort)的作用完全相同。如果它对list.sort足够好,那么对我也足够好:-)
{ "f", f, METH_VARARGS, "doc_string" }
>>> help(range)
Help on built-in function range in module __builtin__:

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

...