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

如何获取含默认值的函数调用参数字典?已试kwargs与inspect未果

解决函数参数(含默认值)转字典的方案

我太懂你做实验时反复写代码记录参数的麻烦了!想要快速拿到函数接收的所有变量名和对应值(包括没传入的默认值)的字典,其实inspect模块完全能满足需求,可能之前的用法没踩对关键点,我给你分享一个靠谱的实现:

核心实现代码

先写一个通用的工具函数,专门用来提取参数字典:

import inspect

def get_function_args(func, *args, **kwargs):
    # 获取目标函数的签名信息
    sig = inspect.signature(func)
    # 绑定调用时传入的所有参数(位置+关键字)
    bound_args = sig.bind(*args, **kwargs)
    # 自动填充未传入的参数默认值
    bound_args.apply_defaults()
    # 转成字典返回
    return dict(bound_args.arguments)

用法示例

比如你有一个实验用的函数:

def experiment_func(learning_rate, batch_size=32, optimizer="adam", dropout=0.1):
    # 调用工具函数获取参数字典
    params = get_function_args(experiment_func, learning_rate=0.001, dropout=0.2)
    print(params)
    # 输出结果: {'learning_rate': 0.001, 'batch_size': 32, 'optimizer': 'adam', 'dropout': 0.2}

experiment_func(0.001, dropout=0.2)

为什么之前的尝试没生效?

  • 只用**kwargs的话,只能拿到显式传入的关键字参数,既拿不到位置参数,也获取不到未传入的默认值;
  • 单纯用inspect模块但没用到bind()和apply_defaults()组合:前者负责把传入的参数和函数签名做匹配,后者会自动把没传的参数补上默认值,这两步是核心。

这个工具函数可以直接复用在你的所有实验函数里,不用再重复写参数记录的代码啦!

内容的提问来源于stack exchange,提问作者Jose Javier Gonzalez Ortiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:52:02