Defaultdict和constant_factory vs lambda

时间:2015-04-17 05:36:47

标签: python defaultdict

defaultdict itertools.repeat()(来自馆藏)提供了一个示例:

  

创建常量函数的更快,更灵活的方法是使用def constant_factory(value): return itertools.repeat(value).next d = defaultdict(constant_factory('<missing>')) d.update(name='John', action='ran') '%(name)s %(action)s to %(object)s' % d >>>'John ran to <missing>' ,它可以提供任何常量值(而不仅仅是零):

d = defaultdict(lambda: '<missing>')
d.update(name='John', action='ran')

'%(name)s %(action)s to %(object)s' % d
>>>'John ran to <missing>'

所以这似乎有效,但是这样做:

constant_factory

这最后一个版本对我来说更紧凑,更清洁。是否有明确的速度或记忆或可维护性(或任何其他)理由来定义lambda而不是使用{{1}}功能?我会在其他人使用(和维护)的代码中使用它,所以我想确保我不仅仅是按照自己的喜好来玩。

1 个答案:

答案 0 :(得分:2)

itertools.repeat(value).next比lambda函数快得多。这是因为lambda函数执行python字节码,而itertools原语用C实现。