为了账号安全,请及时绑定邮箱和手机立即绑定

从/使用函数参数作为键和默认值作为值创建字典

从/使用函数参数作为键和默认值作为值创建字典

白衣染霜花 2023-12-12 21:22:17
我想从函数中获取一个字典,该字典将函数参数作为键,将默认值作为值。我曾经inspect.getfullargspec()获取参数列表和默认值列表。然后我尝试使用dict(zip())这些列表创建字典。这有效,但前提是每个参数都有默认值。如果没有默认值,一切都会变得混乱(正如预期的那样)。例如,如果参数没有默认值,我该如何添加 aNone作为值。或者还有其他想法吗?这是代码:def fn(name, age=18):    passspec = getfullargspec(fn)args = spec.argsdefaults = spec.defaultszipped = dict(zip(args, defaults))
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

由于非默认参数必须始终位于左侧(因为非默认参数不能位于默认参数之后),因此您可以计算需要多少填充,然后将其添加到默认参数的前面:


def func(a, b=1, c=2, *args, **kwargs):

    pass


spec = getfullargspec(func)

padded_defaults = (None,) * (len(spec.args) - len(spec.defaults)) + spec.defaults


zipped = dict(zip(spec.args, padded_defaults))  # {'a': None, 'b': 1, 'c': 2}

(len(spec.args) - len(spec.defaults))计算需要多少左侧填充,然后使用“序列乘法”( (None,) *) 生成该填充。+ spec.defaults然后将填充连接到现有默认值的左侧。


在某些极端情况下这可能会中断;虽然我无法立即想到这样的情况。由于元组串联,这也不是很有效,但在 99% 的情况下这可能不是问题。


arg->default 之间似乎没有存储在任何地方,因此最好的选择似乎是根据每个参数的数量推断哪些参数具有哪些默认值。


查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信