我有这个代码:
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,但不要将传递的字典作为 *args 那是因为在任何情况下我都不会将 dict 传递给 *args。
请您参考如下方法:
t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(args,kwargs)
t.f1(kwargs)
需要
t = Test()
args = [1,2,3]
kwargs= {'a':1,'b':2}
t.f1(*args,**kwargs)
t.f1(**kwargs)
否则它将 args 和 kwargs 作为第一个和第二个参数传递(它们都在函数内部折叠为 *args)
您的参数解包是正确的,但没有为参数打包添加正确的语法。
