如何获取含默认值的函数调用参数字典?已试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
相关产品推荐
相关产品推荐

