关于python:有效地在多个函数中使用多个参数

Using multiple arguments in multiple functions efficiently

我一直在研究*args**kwargs的使用,我咨询过一些相关的帖子,提供了许多有趣的例子:

对于参数**(双星/星号)和*(星/星号)做了什么?

*args和**kwargs?

如何在python中将列表扩展为函数参数

将python dict转换为kwargs?

但是,上面的线程没有提供一个明确的答案在多个函数中灵活使用相同(关键字)参数及其默认值的最佳方法是什么?灵活地说,我的意思是能够在每个函数中根据具体情况定义额外的(关键字)参数。

本质上,我希望避免在每个函数中反复手动定义相同的参数,而只关注那些在每个函数中都是必需的。

例如,而不是:

1
2
3
4
5
def testfunction1(voltage=0, state="bleedin", status=0):
    ...do something...

def testfunction2(voltage=0, state="bleedin", status=0, action="VOOM"):
    ...do something else...

(注:status可以是类似于列表、元组或数组的任何东西。)

我想要以下几行的:

1
2
3
4
5
6
7
d = {"voltage": 0,"state":"bleedin", status}

def testfunction1(**d):
    ...do something...

def testfunction2(**d, action="VOOM"):
    ...do something else...

然后我可以调用每个函数,比如:

1
testfunction1(voltage=5, state="healthy")

或者直接指定参数如下:

1
testfunction1((5,"healthy", statuslist)

希望这是清楚的,但如果必要的话,我很乐意进一步澄清。


下面是一个使用注释中提到的类的方法。

1
2
3
4
5
6
class test:
    def __init__(self,voltage = 5, state ="bleedin", status = 0):
        self.arguments = {'voltage' : voltage, 'state' : state, 'status': status}
    #You essentially merge the two dictionary's with priority on kwargs
    def printVars(self,**kwargs):
        print({**self.arguments,**kwargs})

这是一个样本

1
2
3
>>> a = test()
>>> a.printVars(status = 5, test = 3)
{'voltage': 5, 'state': 'bleedin', 'status': 5, 'test': 3}