Давайте создадим простой кортеж, словарь и функцию.func (* tuple) 'раскалывает кортежи, но как работает функция func (** dictionary)?
>>> tup = (7, 3)
>>> dic = {"kw1":7, "kw2":3}
>>> def pr(a, b):
... print a, b
Ниже показано, что *
делает перед кортежем и словаря в качестве аргумента.
>>> pr(tup)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pr() takes exactly 2 arguments (1 given)
>>> pr(*tup)
7 3
>>> pr(*dic)
kw1 kw2
Теперь давайте попробуем **
перед аргументом.
>>> pr(**tup)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pr() argument after ** must be a mapping, not tuple
Хорошо, кажется ** работает только при использовании словаря в качестве аргумента. Итак, давайте попробуем это со словарем.
>>> pr(**dic)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pr() got an unexpected keyword argument 'kw1'
Что? Может ли кто-нибудь показать мне пример этого последнего случая, который не вызывает ошибку?
Вы и Daniel как ответить на этот вопрос, но по-другому, если бы я мог тикать оба ответа, как правильный один я бы. – Bentley4
Это stackoverflow;) –
Я бросил монету, и Даниил выиграл. Прости меня. – Bentley4