创建字典 from/with 函数参数作为键,默认值作为值
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))
由于non-default参数必须一直在左边(因为non-defaulting参数不能在默认后出现),你可以计算你需要多少padding,然后加上到默认值的前面:
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
然后将填充连接到现有默认值的左侧。
这可能在某些特殊情况下会中断;虽然我想不到这样的情况off-hand。由于元组连接,这也不是很有效,但在 99% 的情况下这可能不是问题。
似乎没有存储在任何地方的 arg->default 之间的映射,因此您最好的选择似乎是根据每个参数的数量推断哪些参数具有哪些默认值。
我想从函数中获取字典,该函数将函数参数作为键,将默认值作为值。
我使用 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))
由于non-default参数必须一直在左边(因为non-defaulting参数不能在默认后出现),你可以计算你需要多少padding,然后加上到默认值的前面:
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
然后将填充连接到现有默认值的左侧。
这可能在某些特殊情况下会中断;虽然我想不到这样的情况off-hand。由于元组连接,这也不是很有效,但在 99% 的情况下这可能不是问题。
似乎没有存储在任何地方的 arg->default 之间的映射,因此您最好的选择似乎是根据每个参数的数量推断哪些参数具有哪些默认值。