当给定**kwargs时,如何在python中使*args成为可选的?
我有以下代码:当给定**kwargs时,如何在python中使*args成为可选的?,python,variadic-functions,keyword-argument,Python,Variadic Functions,Keyword Argument,我有以下代码: class Test(object): def f1(self,*args,**kwargs): print args print kwargs self.f2(*args,**kwargs) def f2(self,*args,**kwargs): print "calling f2" print "args= ",args print "kwargs= ",kwargs t =
class Test(object):
def f1(self,*args,**kwargs):
print args
print kwargs
self.f2(*args,**kwargs)
def f2(self,*args,**kwargs):
print "calling f2"
print "args= ",args
print "kwargs= ",kwargs
t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(args,kwargs)
#second call
t.f1(kwargs)
它会打印出来
([1, 2, 3], {'a': 1, 'b': 2})
{}
calling f2
args= ([1, 2, 3], {'a': 1, 'b': 2})
kwargs= {}
({'a': 1, 'b': 2},)
{}
calling f2
args= ({'a': 1, 'b': 2},)
kwargs= {}
我想使构造中的*args成为可选的。也就是说,如果我通过dict,它将在上面的第二次调用中作为args。我不想那样。
我基本上想要这个结构:
f1*args,**kwargs
-如果存在*args,则处理*args
如果不存在,则处理**kwargs,但不要将传递的dict作为*args
这是因为我在任何情况下都不会将dict传递给*args
需要
t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(*args,**kwargs)
t.f1(**kwargs)
否则,它将args和kwargs作为第一个和第二个参数传递,这两个参数在函数中都折叠为*args
您的参数解包正确,但没有为参数打包添加正确的语法
需要
t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(*args,**kwargs)
t.f1(**kwargs)
否则,它将args和kwargs作为第一个和第二个参数传递,这两个参数在函数中都折叠为*args
你的论点解包是正确的,但没有为论点打包添加正确的语法。别担心,这就是我们来这里的目的:我问这个问题是因为一个问题,我已经在上面的编辑中包括了这个问题,这是由于类似的解包/打包,但我不知道为什么作为一个新问题问这个问题最好不要担心,这就是我们来这里的目的:我问这个问题是因为一个问题,我已经在上面的编辑中包括了这个问题,这是由于类似的拆包/包装,但我不知道为什么最好作为一个新问题问这个问题
t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(*args,**kwargs)
t.f1(**kwargs)