Я переменная** Ссылка на переменную
data = {
'username' : self.username,
'attributes' : self._get_attrs(),
}
Что это значит, когда я ссылаться на него как ** данные?
Я переменная** Ссылка на переменную
data = {
'username' : self.username,
'attributes' : self._get_attrs(),
}
Что это значит, когда я ссылаться на него как ** данные?
**
расширяет ваш словарь. Пример:
def func(username=None, attributes=None):
print(username)
data = {
'username' : "Bob",
'attributes' : {},
}
func(**data)
# results in "Bob"
Он также может быть использован для сбора ключевых слов аргументы (kwargs), как показано на this question about *args and **kwargs.
Кроме того, в Python 3.5+ [его можно использовать в более общем плане для создания 'dict's из других сопоставлений.] (Https://www.python.org/dev/peps/pep-0448/), например. объединив два 'dict', чтобы создать новый третий 'dict' с' объединенными = {** dict1, ** dict2} '. – ShadowRanger
**
в **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}
@Rogalski: Я поначалу тоже думал, что это дубликат, но другой вопрос только о звездах * в параметрах *. –