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

如何用字典调用函数并忽略意外关键字参数(不修改原函数)

问题场景
def some_function(a, b):
    return a + b
  
some_magical_workaround({"a": 1, "b": 2, "c": 3})  # 返回3

无法为some_function添加**kwargs参数,需创建通用的包装函数some_magical_workaround实现上述调用,且该函数要能适配其他参数未知的函数。

解决方案

借助Python内置的inspect模块就能实现,核心逻辑是先获取目标函数的参数列表,再从传入的字典中筛选出匹配的参数调用函数。

通用适配版

如果要让包装函数能灵活适配任意函数,可以写成如下形式:

import inspect

def some_magical_workaround(func, param_dict):
    # 获取目标函数的所有参数名
    func_param_names = inspect.signature(func).parameters.keys()
    # 过滤出字典中与函数参数匹配的键值对
    valid_params = {k: v for k, v in param_dict.items() if k in func_param_names}
    # 调用函数并返回结果
    return func(**valid_params)

# 测试原场景
def some_function(a, b):
    return a + b

print(some_magical_workaround(some_function, {"a": 1, "b": 2, "c": 3}))  # 输出3

适配其他函数示例

换个参数结构不同的函数也能正常运行:

def calculate_volume(length, width, height):
    return length * width * height

print(some_magical_workaround(calculate_volume, {"length": 2, "width": 3, "height": 4, "extra": 10}))  # 输出24

与示例调用格式完全匹配版

如果希望some_magical_workaround不用每次传入目标函数,可以用闭包绑定函数:

import inspect

def wrap_target_func(func):
    def some_magical_workaround(param_dict):
        func_param_names = inspect.signature(func).parameters.keys()
        valid_params = {k: v for k, v in param_dict.items() if k in func_param_names}
        return func(**valid_params)
    return some_magical_workaround

# 绑定目标函数
some_magical_workaround = wrap_target_func(some_function)
# 调用方式与示例完全一致
print(some_magical_workaround({"a": 1, "b": 2, "c": 3}))  # 输出3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:40:38