我有一个包含键/值对的字典vars = {'a' : 1, 'b' : 2}
。将来可以使用新变量扩展此词典。我想用vars dict中的变量来调用func1。在func1中,我将使用vars dict中的零个或多个变量。如果func1必须调用func2,我希望func2从原始vars dict接收所有变量。Func2将使用vars dict中的零个或多个变量。
类似这样的东西:
def func1(**kwargs):
print(f'func1 a = {a}, b is not important')
return func2(**kwargs)
def func2(**kwargs):
return f'func2 a = {a}, b = {b}, both variables are important'
vars = {'a' : 1, 'b' : 2}
print(func1(**vars))
但是这不起作用,因为kwargs是一本字典。如果需要,我可以在函数的开头解压缩变量,例如:
a = kwargs['a']
b = kwargs['b']
但是如果新的变量“ c”出现在原始的vars词典中,我将不得不在每个函数的开头更改这些解压缩。我也可以设置参数def func1(a, b):
和def func2(a, b):
,但我必须重新创建kwargs字典才能将其进一步发送。同样,如果出现新的变量“ c”,我将不得不更改每个函数的签名。我还可以将func1定义为波纹管,以便进一步传递变量:
def func1(a, kwargs):
print(f'func1 a = {a}, b is not important')
kwargs['a'] = a
return func2(**kwargs)
也许创建一个对象并将其属性设置为vars dict键/值对,然后将该对象作为函数的参数发送?
在这种情况下,如何以最优雅的方式在函数之间传递任意变量?
问候
为什么不只将变量保存在字典中并以这种方式访问它们?
def func1(**kwargs):
print(f"func1 a = {kwargs['a']}, b is not important")
return func2(**kwargs)
def func2(**kwargs):
return f"func2 a = {kwargs['a']}, b = {kwargs['b']}, both variables are important"
vars = {'a' : 1, 'b' : 2}
print(func1(**vars))