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

Python中基于已有函数对象构造新函数,适配多参数签名的实现方法

可行实现方案

可以通过Python标准库inspect模块解析函数签名实现,无需提前知道f的参数结构,只要f的参数列表中包含名为c的入参即可适配:

import inspect

def make_h(f):
    sig = inspect.signature(f)
    if "c" not in sig.parameters:
        raise ValueError("函数f未包含名为c的入参")
    
    def h(*args, **kwargs):
        # 绑定实际入参到函数签名,自动适配位置/关键字传参、默认值
        bound_args = sig.bind(*args, **kwargs)
        bound_args.apply_defaults()
        c_val = bound_args.arguments["c"]
        x, y = f(*args, **kwargs)
        return x * c_val + y
    
    return h

效果验证

不同参数签名的函数都可以正确适配:

  • 四参数场景
def f1(a, b, c, d):
    return a+b, c+d
assert make_h(f1)(1,2,3,4) == 16
  • 三参数(l,m,c)场景
def f2(l, m, c):
    return l+m, m-c
assert make_h(f2)(1,2,3) == 8
  • 两参数(c,r)场景
def f3(c, r):
    return c*r, r-c
assert make_h(f3)(2,5) == 23

实现说明

inspect.signature是Python官方提供的函数签名解析工具,通过bind方法可以把任意传入的位置参数、关键字参数和函数的参数列表做映射,不管c在参数列表的哪个位置、用户用位置还是关键字形式传参,都能准确拿到c的实际取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:54:00