2016-02-26 2 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' с' объединенными = {** dict1, ** dict2} '. – ShadowRanger

1

** в **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} 
Смежные вопросы