Предупреждение Cell-var-from-loop от 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 описание:

переменная, используемая в замыкании, определяется в цикле. Это приведет ко всем закрытиям, использующим одно и то же значение для закрытая переменная.

но я же понятия не имею, что это значит. Может ли кто-нибудь привести пример этой проблемы?

1 ответов


имя sort_key в теле lambda будет просмотрено, когда функция фактически вызывается, поэтому она увидит, что когда-либо значение 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))