Предупреждение 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
sort_key
:
results.sort(key=lambda k, sk=sort_key: get_from_dot_path(k, sk),
reverse=(order == -1))