Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当给定**kwargs时,如何在python中使*args成为可选的?_Python_Variadic Functions_Keyword Argument - Fatal编程技术网

当给定**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)