来自 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 报告了一个错误:

Cell variable sort_key defined in loop (cell-var-from-loop)

有人能提示一下这里发生了什么吗? 根据 pylint 源代码的描述是:

闭包中使用的变量在循环中定义。 这将导致所有闭包使用相同的 the closed-over variable.

但是我不知道这意味着什么。谁能举个例子说明这个问题?

44123 次浏览

在实际调用函数时,将查找 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))

使用 Part ():

import functools
results.sort(key=functools.partial(get_from_dot_path, foo=sort_key),
reverse=(order == -1))