繁体   English   中英

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

[英]Create dictionary from/with function arguments as keys and default values as value

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

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

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

这是代码:

def fn(name, age=18):
    pass

spec = getfullargspec(fn)
args = spec.args
defaults = spec.defaults

zipped = dict(zip(args, defaults))

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

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 存储在任何地方之间似乎没有映射,因此您最好的选择似乎是根据每个参数的数量推断哪些参数具有哪些默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM