unnecessary-lambda (PLW0108)
源自 Pylint 代码检查工具。
有时提供修复。
此规则不稳定且处于预览状态。使用需要 --preview 标志。
作用
检查由单个函数调用组成的 lambda 定义,该函数调用具有与 lambda 本身相同的参数。
为什么这不好?
当 lambda 用于包装函数调用,并且仅仅将 lambda 参数传递给该函数时,通常可以用该函数本身替换它,从而消除一个间接级别。
示例
建议改为
修复安全性
此规则的修复被标记为不安全,主要有两个原因。
首先,lambda 主体本身可能包含副作用。
例如,将 lambda x, y: (func()(x, y)) 替换为 func() 会导致行为发生变化,因为 func() 会在定义 lambda 时立即计算,而不是在调用 lambda 时计算。
但是,即使 lambda 主体本身是纯的,lambda 也可能会更改参数名称,这可能会导致调用者按名称传递参数时行为发生变化。
例如,将 foo = lambda x, y: func(x, y) 替换为 foo = func,其中 func 定义为 def func(a, b): return a + b,对于通过按名称传递参数来执行 lambda 的调用者来说,这将是一个重大更改,如:foo(x=1, y=2)。 由于 func 没有像 lambda 那样定义参数 x 和 y,因此该调用将引发 TypeError。