gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:48:22 25 4
gpt4 key购买 nike

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

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

关于python - 从/使用函数参数作为键和默认值作为值创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64446784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com