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}}功能?我会在其他人使用(和维护)的代码中使用它,所以我想确保我不仅仅是按照自己的喜好来玩。
答案 0 :(得分:2)
itertools.repeat(value).next
比lambda函数快得多。这是因为lambda函数执行python字节码,而itertools
原语用C实现。