pythonitertools'constant\u factory'示例如何优于'lambda:x`?

pythonitertools'constant\u factory'示例如何优于'lambda:x`?,python,lambda,itertools,Python,Lambda,Itertools,在defaultdict的文档中有以下示例: >>> def constant_factory(value): ... return itertools.repeat(value).next 作为一种“创建常量函数的更快、更灵活的方法” 这比什么好 def constant_factory(value): return lambda : value ? 请注意,当然没有人会为此定义函数。。。仅使用(lambda:42)比调用常量工厂(42)更清晰、更简短 要

defaultdict
的文档中有以下示例:

>>> def constant_factory(value):
...     return itertools.repeat(value).next
作为一种“创建常量函数的更快、更灵活的方法”

这比什么好

def constant_factory(value):
    return lambda : value
?

请注意,当然没有人会为此定义函数。。。仅使用
(lambda:42)
比调用
常量工厂(42)
更清晰、更简短


要创建一个常量工厂,如果需要返回一个可变的,可以使用
(lambda x=[]:x)
(顺便说一句,这就是
常量工厂([])
,但它经常会咬回去……例如,请参见)。

使用
itertools就足够令人惊讶了。重复(值).next实际上在Python2和Python3中都快了约30%两倍(明显的变化是
\uuuuuuuuuuuuuuuu

它不多,但也没有理由浪费它

PS:我想说这表明
lambda
可以改进(我看不出绑定方法比闭包更快的逻辑原因),但是
lambda
在Python社区中并不受欢迎。


原因是,
itertools
原语是用C实现的,而lambda执行Python字节码。仅仅返回捕获的值确实很快,但它仍然是字节码,需要像任何Python函数调用一样进行大量的设置/拆卸。

也许itertools实现比一般的lambda优化和更快?这并不是说
lambda
itertools慢。重复
,这是因为Python函数比C函数慢。如果检查字节码和函数类型,您将看到
lambda
def():返回值
完全等效。
value
是一个闭包变量这一事实也可能发挥作用,但在我的测量中,硬编码的
lamda:42
已经花费了1.77倍的时间,只要
重复。