Pour le code suivant:
for sort_key, order in query_data['sort']:
results.sort(key=lambda k: get_from_dot_path(k, sort_key),
reverse=(order == -1))
Pylint a signalé une erreur:
Variable de cellule sort_key définie dans la boucle (cell-var-from-loop)
Quelqu'un pourrait-il donner une idée de ce qui se passe ici? À partir du code source de pylint, la description est:
Une variable utilisée dans une fermeture est définie dans une boucle. Cela entraînera toutes les fermetures en utilisant la même valeur pour la variable fermée.
Mais je n'ai aucune idée de ce que cela signifie. Quelqu'un pourrait-il donner un exemple du problème?
results
? Liste ordinaire? Autre chose?Réponses:
Le nom
sort_key
dans le corps dulambda
sera recherché lorsque la fonction est réellement appelée, donc il verra la valeur lasort_key
plus récente. Comme vous appelezsort
immédiatement, la valeur desort_key
ne changera pas avant que l'objet fonction résultant ne soit utilisé, vous pouvez donc ignorer l'avertissement en toute sécurité. Pour le désactiver, vous pouvez définirsort_key
la valeur par défaut d'un paramètre surlambda
:results.sort(key=lambda k, sk=sort_key: get_from_dot_path(k, sk), reverse=(order == -1))
la source
key=partial(get_from_dot_path, foo=sort_key)
place de l'expression lambda (en supposant qu'il existe un nom de paramètrefoo
défini parget_from_dot_path
celui-ci que vous pouvez utiliser pour un argument de mot-clé;partial
permet uniquement de remplir les paramètres de position exclusivement à partir de la gauche).