如何以编程方式高效将多参数以名称为键添加到字典
符合Python风格的动态参数转字典方案
嘿,这个需求太常见了!我来给你几个既Pythonic又高效的方案,彻底摆脱手动写重复赋值语句的麻烦~
方案1:直接用locals()快速搞定
如果你的函数参数都是固定的(没有*args/**kwargs),而且函数开头还没定义其他变量,直接用locals()就能一步到位:
def create_results_dict(age, sex, name): # 此时locals()里刚好就是传入的所有参数键值对 return locals().copy()
调用示例:
print(create_results_dict(28, "female", "Alice")) # 输出: {'age': 28, 'sex': 'female', 'name': 'Alice'}
⚠️ 注意:一定要在函数开头、还没定义任何其他局部变量前调用locals(),不然会把你后续定义的变量也混进字典里哦。
方案2:用inspect模块处理复杂参数场景
如果你的函数涉及可变参数(*args/**kwargs)、默认参数,或者想更严谨地避免混入无关变量,inspect模块是最佳选择——它能帮你精准获取函数的参数签名和绑定的参数值:
import inspect def create_results_dict(age, sex, name="Unknown", *args, **kwargs): # 获取当前函数的参数签名 sig = inspect.signature(create_results_dict) # 绑定传入的所有参数(包括位置参数、关键字参数) bound_args = sig.bind(*args, **kwargs) # 自动填充默认参数(如果有的参数没传) bound_args.apply_defaults() # 转换成字典返回 return dict(bound_args.arguments)
调用示例:
print(create_results_dict(30, "male", extra_info="developer")) # 输出: {'age': 30, 'sex': 'male', 'name': 'Unknown', 'args': (), 'kwargs': {'extra_info': 'developer'}}
这个方案完全不用担心混入额外变量,而且能完美处理各种参数类型,灵活性拉满。
方案3:用**kwargs极简实现(适合关键字参数调用场景)
如果你能接受调用函数时必须用关键字参数,那这个方案最简洁高效:
def create_results_dict(**kwargs): return kwargs.copy()
调用示例:
print(create_results_dict(age=25, sex="non-binary", city="Beijing")) # 输出: {'age': 25, 'sex': 'non-binary', 'city': 'Beijing'}
优点是代码极简,执行效率最高;缺点是无法直接支持位置参数调用,适合只需要关键字参数的场景。
关于你的核心疑问:能不能编程获取参数名称?
当然可以!inspect模块就是干这个的:
- 通过
inspect.signature(func).parameters能拿到函数所有参数的名称和属性 bound_args.arguments就是参数名称与对应值的映射字典,完全满足你“动态获取参数名和值”的需求
内容的提问来源于stack exchange,提问作者pedjjj
相关产品推荐
相关产品推荐

