You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何覆盖Python函数的argspec以优化help()输出?

修改Python函数的help显示签名

要让help(my_func)显示合并后的参数而非**kwargs,可以通过修改函数的__signature__属性实现——这是help()工具读取函数签名的核心属性。具体实现如下:

实现步骤

  • 导入inspect模块,用于提取子函数参数信息并构造新签名
  • 合并两个子函数的参数列表与默认值
  • 构造新的函数签名,覆盖原函数的__signature__属性

完整代码示例

import inspect

def my_subfunc_1(a=None, b=None):
    pass

def my_subfunc_2(c=None, d=None):
    pass

def my_func(**kwargs):
    # 拆分参数到对应子函数的逻辑
    sub1_args = {k: v for k, v in kwargs.items() if k in ['a', 'b']}
    sub2_args = {k: v for k, v in kwargs.items() if k in ['c', 'd']}
    my_subfunc_1(**sub1_args)
    my_subfunc_2(**sub2_args)

# 获取两个子函数的参数规格
spec1 = inspect.getfullargspec(my_subfunc_1)
spec2 = inspect.getfullargspec(my_subfunc_2)

# 合并参数列表与默认值(保持子函数的参数顺序)
merged_param_names = spec1.args + spec2.args
merged_defaults = spec1.defaults + spec2.defaults

# 构造参数对象列表
params = []
for name, default in zip(merged_param_names, merged_defaults):
    params.append(inspect.Parameter(
        name,
        inspect.Parameter.POSITIONAL_OR_KEYWORD,
        default=default
    ))

# 替换原函数的签名
my_func.__signature__ = inspect.Signature(parameters=params)

验证效果

执行help(my_func)后,会显示:

Help on function my_func in module main:

my_func(a=None, b=None, c=None, d=None)

内容的提问来源于stack exchange,提问作者Yes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:55:17