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

如何获取被Lambda表达式包装的函数的__doc__文档字符串

获取Lambda包装函数的文档字符串

你遇到的问题很典型——lambda表达式本身没有自己的文档字符串,而且它只是直接调用原函数,没办法直接关联到原函数的__doc__属性。不过我们可以换个思路,用functools.partial来替代lambda,这样就能轻松获取到原函数的文档字符串了。

问题重现

先看你给出的示例代码,用lambda的时候确实拿不到原函数的docstring:

def foo(a=1):
    """Foo docstring"""
    return a

dct = {
    "a": foo,
    "b": lambda: foo(2),
}

for k, v in dct.items():
    print(k, v(), v.__doc__)

输出结果:

a 1 Foo docstring
b 2 None

解决方案:使用functools.partial

partial会创建一个可调用对象,它保存了原函数以及预设的参数,而且可以通过func属性访问到原函数,这样就能获取到原函数的文档字符串了。

修改后的代码如下:

from functools import partial

def foo(a=1):
    """Foo docstring"""
    return a

dct = {
    "a": foo,
    "b": partial(foo, 2),
}

for k, v in dct.items():
    if hasattr(v, "func"):
        print(k, v(), v.func.__doc__)
    else:
        print(k, v(), v.__doc__)

运行后的输出:

a 1 Foo docstring
b 2 Foo docstring

为什么这个方法可行?

  • partial对象本质上是对原函数的包装,它会保留原函数的引用(存在func属性里)
  • 调用partial对象和直接调用原函数传参的效果完全一致
  • 通过检查func属性,我们可以统一处理普通函数和partial包装后的函数,确保都能拿到正确的文档字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:02:32