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

动态复制函数签名至Lambda后,help输出的签名被截断求助

Lambda函数签名复制后help输出截断的解决办法

直接给lambda的__signature__赋值inspect.Signature对象时,help函数会错误拼接lambda的原始定义与自定义签名,导致输出截断。以下是两种解决方法:

方法一:使用functools.wraps(推荐)

这是Python中复制函数元数据的标准方式,能完整继承原函数的签名、文档等信息:

from inspect import signature
from functools import wraps

def funcA(a: str) -> str:
    return a.lower()

# 用wraps装饰lambda,复制funcA的元数据
funcB = wraps(funcA)(lambda a: funcA(a))
help(funcB)

执行后help输出正常:

Help on function funcA in module __main__:

funcB(a: str) -> str
    <lambda>

方法二:手动修正元数据

如果需要自定义显示效果,可以手动修改lambda的__name__和__doc__,配合__signature__使用:

from inspect import signature

def funcA(a: str) -> str:
    return a.lower()

funcB = lambda a: funcA(a)
sig = signature(funcA)

# 修改名称让显示更友好,同时构造匹配的文档字符串
funcB.__name__ = "funcB"
funcB.__signature__ = sig
funcB.__doc__ = f"{funcB.__name__}{sig}"

help(funcB)

输出效果:

Help on function funcB in module __main__:

funcB(a: str) -> str
    funcB(a: str) -> str

原方法失效原因

help函数处理lambda时,会优先读取其原始代码片段(如lambda a:),再尝试拼接__signature__的内容,两者格式不兼容,最终导致签名被截断。而functools.wraps会替换lambda的核心元数据,让help正确识别并显示完整签名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:05:29