2012-07-31 58 views
2

我正在抓我的頭在下面的代碼中發生了什麼。在類初始化期間傳遞參數

class foo(object): 
    def __init__(self,*args): 
     print type(args) 
     print args 

j_dict = {'rmaNumber':1111, 'caseNo':2222} 
print type(j_dict) 
p = foo(j_dict) 

它產生:

<type 'dict'> 
<type 'tuple'> 
({'rmaNumber': 1111, 'caseNo': 2222},) 

在我看來,這個代碼字典轉換爲一個元組!任何人都可以解釋這

+0

那麼,它包含一個元素的元組:一個字典 – BorrajaX 2012-07-31 20:14:50

回答

9

其實這是因爲args是一個tuple來容納一個可變長度參數列表。 args[0]仍然是你的dict - 沒有轉換髮生。

有關argskwargs(args的關鍵字版本)的更多信息,請參閱this tutorial

3

當你使用*args時,所有的位置參數都被壓縮或壓縮到一個元組中。

我使用**kwargs,所有關鍵字參數都打包成一個字典。

(其實名字argskwargs是不相關的,有哪些事項星號):-)

例如:

>>> def hello(* args): 
...  print "Type of args (gonna be tuple): %s, args: %s" % (type(args), args) 
... 
>>> hello("foo", "bar", "baz") 
Type of args (gonna be tuple): <type 'tuple'>, args: ('foo', 'bar', 'baz') 

現在,這不會發生,如果你沒」 t「打包」這些參數。

>>> def hello(arg1, arg2, arg3): 
...  print "Type of arg1: %s, arg1: %s" % (type(arg1), arg1) 
...  print "Type of arg2: %s, arg2: %s" % (type(arg2), arg2) 
...  print "Type of arg3: %s, arg3: %s" % (type(arg3), arg3) 
... 
>>> hello("foo", "bar", "baz") 
Type of arg1: <type 'str'>, arg1: foo 
Type of arg2: <type 'str'>, arg2: bar 
Type of arg3: <type 'str'>, arg3: baz 

您也可以參考這個問題Python method/function arguments starting with asterisk and dual asterisk

相關問題