有效地在多个函数中使用多个参数

时间:2018-03-19 16:04:09

标签: python python-3.x

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

What does ** (double star/asterisk) and * (star/asterisk) do for parameters?

*args and **kwargs?

How to expand a list to function arguments in Python

Converting Python dict to kwargs?

但是,上述主题并未对问题提供明确答案 在多个函数中灵活使用相同(关键字)参数的默认值的最佳方法是什么?并且通过灵活方式我的意思是能够定义其他(关键字)每个函数中的参数逐个案例。

基本上,我想避免一遍又一遍地在每个函数中手动定义相同的参数,而只关注其他函数 每项功能都需要。

例如,而不是:

def testfunction1(voltage=0, state="bleedin", status=0):
    ...do something...

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

(注意:status可以是列表,元组或数组。)

我想要的内容如下:

d = {"voltage": 0, "state": "bleedin", status} 

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

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

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

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

或直接指定参数:

testfunction1((5, "healthy", statuslist)

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

1 个答案:

答案 0 :(得分:1)

以下是使用评论中提到的类的方法。

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})

以下是一个示例运行

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