1. ホーム
  2. python

[解決済み] PylintによるCell-var-from-loopの警告。

2022-12-07 16:43:44

質問

以下のコードについて。

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のソースコードからは以下のように記述されています。

クロージャで使用される変数がループで定義されています。 これにより、すべてのクロージャが同じ値を使用することになります。 を使うことになります。

しかし、私はそれが何を意味するのか手がかりを持っていません。どなたか問題の例をあげていただけませんか?

どのように解決するのですか?

名前 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))