Python,如何以最优雅的方式在函数之间传递任意变量?

问题描述 投票:0回答:1

我有一个包含键/值对的字典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键/值对,然后将该对象作为函数的参数发送?

在这种情况下,如何以最优雅的方式在函数之间传递任意变量?

问候

python function parameters kwargs
1个回答
0
投票

为什么不只将变量保存在字典中并以这种方式访问​​它们?

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))
© www.soinside.com 2019 - 2024. All rights reserved.