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
。