Cell-var-aus-loop-Warnung von Pylint
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 einen Fehler gemeldet:
Zelle variable sort_key definiert in loop (cell-var-aus-Schleife)
Könnte jemand einen Tipp geben, was hier passiert? Von pylint-source-code in der Beschreibung ist:
Eine variable in einer closure definiert ist, in einer Schleife.
Dies wird dazu führen, dass alle Verschlüsse mit demselben Wert für
die geschlossen-über variable.
Aber ich habe keine Ahnung, was es bedeutet. Könnte jemand ein Beispiel geben, das problem?
- Welche Art von Objekt ist
results
? Gewöhnliche Liste? Etwas anderes? - Siehe z.B. stackoverflow.com/q/12423614/3001761
- z.B. Ergebnisse = [{key: value}, {Schlüssel: Wert} ...]
- Ok. In diesem Fall Stimme ich mit chepner, dass Sie nicht brauchen, um sorgen über die Warnung hier.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Namen
sort_key
im Körper deslambda
gesucht, wenn die Funktion tatsächlich aufgerufen wird, so wird es den Wertsort_key
hatten die meisten vor kurzem. Seit Sie anrufensort
sofort auf, dass der Wert vonsort_key
wird sich nicht ändern, bevor die resultierende Funktion-Objekt verwendet wird, so können Sie ignorieren die Warnung. Ihn zu schweigen zu bringen, können Siesort_key
den default-Wert eines Parameters, um dielambda
:# pylint: disable=cell-var-from-loop
key=partial(get_from_dot_path, foo=sort_key)
anstelle des lambda-Ausdrucks (vorausgesetzt, es gibt einige parameter namefoo
definiert durchget_from_dot_path
, die Sie verwenden können für ein keyword argument;partial
erlaubt nur das ausfüllen von positions-Parametern ausschließlich von Links).