Python 3 个带 lambda 表达式的 defaultdict
Python 3 defaultdict with lambda expression
我有一个代码在 python 2 中工作,但现在在 python 3 中引发了错误 "TypeError: keyword arguments must be strings"。它是一个函数的第一行,所以应该不是以前代码的问题。
map = collections.defaultdict(lambda: 'blinn',**{0: 'constant', 1:'lambert'})
也许有人也可以向我解释这行代码在做什么以及创建的 "map" 对象是什么。我找到了 Python defaultdict and lambda 但我仍然无法理解这行代码。
**{0: 'constant', 1:'lambert'}
将两个默认键值对作为关键字参数传递给 defaultdict()
构造函数。但是,同一个构造函数也会将字典视为第二个参数作为默认值。
因此,**
可以完全省略,在 2 和 3 中:
collections.defaultdict(lambda: 'blinn', {0: 'constant', 1:'lambert'})
Python2 中的演示,显示您获得相同的输出:
>>> 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'
我有一个代码在 python 2 中工作,但现在在 python 3 中引发了错误 "TypeError: keyword arguments must be strings"。它是一个函数的第一行,所以应该不是以前代码的问题。
map = collections.defaultdict(lambda: 'blinn',**{0: 'constant', 1:'lambert'})
也许有人也可以向我解释这行代码在做什么以及创建的 "map" 对象是什么。我找到了 Python defaultdict and lambda 但我仍然无法理解这行代码。
**{0: 'constant', 1:'lambert'}
将两个默认键值对作为关键字参数传递给 defaultdict()
构造函数。但是,同一个构造函数也会将字典视为第二个参数作为默认值。
因此,**
可以完全省略,在 2 和 3 中:
collections.defaultdict(lambda: 'blinn', {0: 'constant', 1:'lambert'})
Python2 中的演示,显示您获得相同的输出:
>>> 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'