Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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))