[python] Pylint의 Cell-var-from-loop 경고

다음 코드의 경우 :

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 변수에 대해 동일한 값을 사용하는 결과를 가져옵니다.

그러나 나는 그것이 의미하는 바에 대한 단서가 없습니다. 누구든지 문제의 예를 들어 줄 수 있습니까?



답변

함수가 실제로 호출 될 때 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))


답변