def thing(mode, data):
return [
item for item in data
if {
'large': lambda item: item > 100,
'small': lambda item: item < 100,
}[mode](item)
]
此列表推导式生成一个 lambda 字典,通过 mode 参数检索一个 lambda,并将其应用于当前正在处理的列表项。我的问题是:这有什么性能特点?
整个字典是在列表组合的每次迭代中从头开始创建的吗?还是创建一次并在每个项目上使用?
请您参考如下方法:
Is the entire dictionary created from scratch during each iteration of the listcomp
是的。
Or is it created once and used on each item?
没有。
幸运的是,在这种情况下(以及我能想到的所有其他类似情况),提前构建字典很容易:
d = {
'large': lambda item: item > 100,
'small': lambda item: item < 100,
}
return [item for item in data if d[mode](item)]
甚至,
func = {
'large': lambda item: item > 100,
'small': lambda item: item < 100,
}[mode]
return [item for item in data if func(item)]
