如果您键入 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/