Für den folgenden Code:
for sort_key, order in query_data['sort']:
results.sort(key=lambda k: get_from_dot_path(k, sort_key),
reverse=(order == -1))
Pylint hat einen Fehler gemeldet:
Zellvariable sort_key in Schleife definiert (cell-var-from-loop)
Könnte jemand einen Hinweis geben, was hier passiert? Aus dem Pylint-Quellcode lautet die Beschreibung:
Eine in einem Abschluss verwendete Variable wird in einer Schleife definiert. Dies führt dazu, dass alle Abschlüsse denselben Wert für die geschlossene Variable verwenden.
Aber ich habe keine Ahnung, was es bedeutet. Könnte jemand ein Beispiel für das Problem geben?
results
? Gewöhnliche Liste? Etwas anderes?Antworten:
Der Name
sort_key
im Hauptteil vonlambda
wird nachgeschlagen, wenn die Funktion tatsächlich aufgerufen wird, sodasssort_key
der zuletzt angegebene Wert angezeigt wird. Da Siesort
sofort aufrufen ,sort_key
ändert sich der Wert von nicht, bevor das resultierende Funktionsobjekt verwendet wird, sodass Sie die Warnung sicher ignorieren können. Um es zum Schweigen zu bringen, können Siesort_key
den Standardwert eines Parameters wie folgt festlegenlambda
:quelle
key=partial(get_from_dot_path, foo=sort_key)
anstelle des Lambda-Ausdrucks verwenden (vorausgesetzt, es ist ein Parameternamefoo
definiertget_from_dot_path
, den Sie für ein Schlüsselwortargument verwenden können;partial
erlaubt nur das Ausfüllen von Positionsparametern ausschließlich von links).