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

我想从函数中获取一个字典,该字典将函数参数作为键,将默认值作为值。


我曾经inspect.getfullargspec()获取参数列表和默认值列表。然后我尝试使用dict(zip())这些列表创建字典。这有效,但前提是每个参数都有默认值。如果没有默认值,一切都会变得混乱(正如预期的那样)。


例如,如果参数没有默认值,我该如何添加 aNone作为值。或者还有其他想法吗?


这是代码:


def fn(name, age=18):

    pass


spec = getfullargspec(fn)

args = spec.args

defaults = spec.defaults


zipped = dict(zip(args, defaults))


白衣染霜花
浏览 104回答 1
1回答

POPMUISE

由于非默认参数必须始终位于左侧(因为非默认参数不能位于默认参数之后),因此您可以计算需要多少填充,然后将其添加到默认参数的前面:def func(a, b=1, c=2, *args, **kwargs):    passspec = getfullargspec(func)padded_defaults = (None,) * (len(spec.args) - len(spec.defaults)) + spec.defaultszipped = dict(zip(spec.args, padded_defaults))  # {'a': None, 'b': 1, 'c': 2}(len(spec.args) - len(spec.defaults))计算需要多少左侧填充,然后使用“序列乘法”( (None,) *) 生成该填充。+ spec.defaults然后将填充连接到现有默认值的左侧。在某些极端情况下这可能会中断;虽然我无法立即想到这样的情况。由于元组串联,这也不是很有效,但在 99% 的情况下这可能不是问题。arg->default 之间似乎没有存储在任何地方,因此最好的选择似乎是根据每个参数的数量推断哪些参数具有哪些默认值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python