Pylint的循环变量警告
对于以下代码:
for sort_key, order in query_data['sort']:
results.sort(key=lambda k: get_from_dot_path(k, sort_key),
reverse=(order == -1))
Pylint 报告了一个错误:
在循环中定义的单元变量 sort_key (cell-var-from-loop)
有人能告诉我这是什么意思吗?根据 pylint 的源代码,描述是:
在闭包中使用的变量是在循环中定义的。这将导致所有使用这个闭包的地方都使用同一个值。
但我完全不明白这是什么意思。有人能举个例子说明这个问题吗?
2 个回答
13
使用 functools.partial() 这个功能:
import functools
results.sort(key=functools.partial(get_from_dot_path, foo=sort_key),
reverse=(order == -1))
141
在这个例子中,lambda
里的sort_key
名字会在函数真正被调用的时候去查找,所以它会看到sort_key
最近的值。因为你是立刻调用sort
,所以在结果函数对象被使用之前,sort_key
的值不会改变,因此你可以放心地忽略这个警告。如果你想消除这个警告,可以把sort_key
设为lambda
一个参数的默认值:
results.sort(key=lambda k, sk=sort_key: get_from_dot_path(k, sk),
reverse=(order == -1))