2016-02-26 80 views
0

我有這個變量**參考可變

data = { 
     'username' : self.username, 
     'attributes' : self._get_attrs(), 
     } 

是什麼意思時,我引用它像**數據?

+0

@Rogalski:我最初還以爲這是一個重複的,但另一個問題是,只有星星*在參數*。 –

回答

0

**展開您的字典。例如:

def func(username=None, attributes=None): 
    print(username) 

data = { 
    'username' : "Bob", 
    'attributes' : {}, 
} 

func(**data) 
# results in "Bob" 

它也可以被用來收集關鍵字參數(kwargs),如在this question about *args and **kwargs看到。

+1

此外,在Python 3.5+中,[它可以更普遍地用於從其他映射構造'dict's](https://www.python.org/dev/peps/pep-0448/),例如,將兩個'dict'組合成一個新的第三個'dict',其中'combined ** {dict1,** dict2}'。 – ShadowRanger

1

** in **data是Python中的一個字典解包運算符。見What is the name of ** in python?

help('CALLS')

如果語法「**表達」出現在函數調用, 「表達」的計算結果必須的映射,這些都 視爲附加的關鍵字參數的內容。如果出現在「表達式」中的關鍵字 以及明確的關鍵字參數,則會引發 「TypeError」異常。

請參閱Understanding kwargs in Python

還有PEP: 448 -- Additional Unpacking Generalizations

>>> {**{'a': 1, 'b': 2}, **{'a': 3, 'c': 4}} 
{'b': 2, 'a': 3, 'c': 4}