我一直在研究*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)
希望这很清楚,但如有必要,我很乐意进一步澄清。
最佳答案
这是使用注释中提到的类的方法。
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}