簡體   English   中英

當給出** kwargs時,如何使python中的* args可選?

[英]how to make *args optional in python when **kwargs is given?

我有以下代碼:

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的字典作為*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)

否則,它將argskwargs作為第一個和第二個參數傳遞(這兩個*args在函數內部都折疊為*args

您的參數 壓縮正確,但是沒有為參數壓縮添加正確的語法。

你這樣做是錯的。

t.f1(*args, **kwargs)
t.f1(**kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM