gpt4 book ai didi

python - 使函数在 help() 函数中的参数有省略号

转载 作者:太空狗 更新时间:2023-10-29 20:58:15 25 4
gpt4 key购买 nike

如果您键入 help(vars),将生成以下内容:

vars(...)
vars([object]) -> dictionary

Without arguments, equivalent to locals().
With an argument, equivalent to object.__dict__.

当我执行以下操作时:

def func(x, y): pass

help(func)

它显示这个:

func(x, y)

我怎样才能改变它,让它像内置函数 vars() 一样在括号之间显示 ...? (即 func(...))

编辑:有人建议使用文档字符串,但这不会满足我的要求。这是一个例子:

def func(x, y):
"""func(...) -> None"""

help(func)

结果:

func(x, y)
func(...) -> None

你看,x, y 仍然显示,而不是 ...

最佳答案

你有(至少)两种选择来实现你想要的。

最好的选择是覆盖 __str__ inspect.Signature 的方法类(class)。但是,由于它是用 C 语言编写的,因此它是只读的。

为此,您需要按如下方式扩展该类:

class MySignature(inspect.Signature):
def __str__(self):
return '(...)'

然后在定义函数后执行:

func_signature = inspect.signature(func)
func.__signature__ = MySignature(func_signature.parameters.values(),
return_annotation=func_signature.return_annotation)

然后将为 help(func) 返回以下内容:

Help on function func in module __main__:

func(...)
(END)

使用这种方法 inspect.signature 仍然有效:

In [1]: inspect.signature(func)
Out[1]: <MySignature (...)>

或者,如果您真的不关心能否正确地反省您的函数(可能还有其他一些用例),那么您可以定义函数的 __signature__ 的值。到不是 Signature 的对象实例:

def func(x, y):
pass

func.__signature__ = object()

help(func)

生成结果:

Help on function func in module __main__:

func(...)
(END)

但是现在inspect.signature(func)会提高TypeError: unexpected object <object object at 0x10182e200> in __signature__ attribute .

注意:最后一个版本很老套,我不推荐它。

有关这两种技术以及签名如何工作的更多信息,请参阅 PEP 0362 .

更新:对于 python 2.7,您可以执行以下操作(使用模拟框架可能更好):

In [1]: import inspect

In [2]: def myformatargspec(*args, **kwargs):
...: return '(...)'
...:

In [3]: def func(x, y):
...: pass
...:

In [6]: inspect.formatargspec = myformatargspec

In [7]: help(func)

Help on function func in module __main__:

func(...)
(END)

关于python - 使函数在 help() 函数中的参数有省略号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35665130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com