如何过滤字典冗余键适配函数参数,避免**传参报错?
解决函数传参冗余键问题的通用方案
核心实现思路
借助Python的inspect模块动态获取目标函数的参数列表,自动从batch字典中筛选出匹配的键值对,无需硬编码参数名即可安全传参。
代码示例
import inspect class GenericWrapper: def do_thing(self, source_ids, src_len, len_src_oovs, extended_source_ids, sos_token_id, unk_token_id, max_len=None, dec_inp_ids=None): # 这里写你的业务逻辑,比如调用model的对应方法 pass def filter_valid_kwargs(target_func, input_dict): # 获取目标函数的参数签名 func_sig = inspect.signature(target_func) # 筛选出input_dict中属于函数参数的键值对 valid_kwargs = {key: val for key, val in input_dict.items() if key in func_sig.parameters} return valid_kwargs # 使用示例 wrapper = GenericWrapper() # 模拟带冗余键的batch字典 batch = { "source_ids": [1, 2, 3], "src_len": 3, "len_src_oovs": 0, "extended_source_ids": [1, 2, 3], "sos_token_id": 0, "unk_token_id": 1, "max_len": 15, "dec_inp_ids": [0, 1, 2], "冗余键1": "无关数据1", "冗余键2": "无关数据2" } # 过滤后传参 valid_args = filter_valid_kwargs(wrapper.do_thing, batch) wrapper.do_thing(**valid_args)
关键说明
inspect.signature()能自动识别函数的所有参数(包括必选、可选参数),完全适配你的do_thing函数参数结构- 字典推导式直接完成冗余键过滤,无需手动维护参数列表,保证代码的通用性
- 可选参数(如
max_len、dec_inp_ids)若在batch中不存在,会自动跳过,函数将使用默认值
内容的提问来源于stack exchange,提问作者tjns
相关产品推荐
相关产品推荐

