次のコードの場合:
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ソースコードからの説明は次のとおりです。
クロージャーで使用される変数は、ループで定義されます。これにより、closed-over変数に同じ値を使用するすべてのクロージャーが生成されます。
しかし、私はそれが何を意味するのか分からない。誰でも問題の例を挙げることができますか?
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))