**{0: 'constant', 1:'lambert'}
передает в две пары ключ-значение по умолчанию в качестве аргументов ключевого слова в конструктор defaultdict()
. Однако тот же конструктор будет рассматривать словарь как второй аргумент как значение по умолчанию.
Таким образом, **
может вообще отсутствовать, как в 2 и 3:
collections.defaultdict(lambda: 'blinn', {0: 'constant', 1:'lambert'})
Demo в Python 2, изображающее вы получите тот же результат:
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0)
>>> import collections
>>> collections.defaultdict(lambda: 'blinn', **{0: 'constant', 1:'lambert'}) == collections.defaultdict(lambda: 'blinn', {0: 'constant', 1:'lambert'})
True
>>> collections.defaultdict(lambda: 'blinn', **{0: 'constant', 1:'lambert'})
defaultdict(<function <lambda> at 0x102426410>, {0: 'constant', 1: 'lambert'})
>>> _[0]
'constant'
>>> collections.defaultdict(lambda: 'blinn', {0: 'constant', 1:'lambert'})
defaultdict(<function <lambda> at 0x102426410>, {0: 'constant', 1: 'lambert'})
>>> _[0]
'constant'
и в Python 3 :
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=6, micro=0, releaselevel='beta', serial=3)
>>> import collections
>>> collections.defaultdict(lambda: 'blinn', {0: 'constant', 1:'lambert'})
defaultdict(<function <lambda> at 0x10e3589d8>, {0: 'constant', 1: 'lambert'})
>>> _[0]
'constant'
'map' является' defaultdict'. если вы используете '**', тогда ключи должны быть строками - '" 0 "и" 1 ". – furas