Pylint'ten döngüden hücre var uyarısı


93

Aşağıdaki kod için:

for sort_key, order in query_data['sort']:
    results.sort(key=lambda k: get_from_dot_path(k, sort_key),
                 reverse=(order == -1))

Pylint bir hata bildirdi:

Döngüde tanımlanan hücre değişkeni sort_key (hücre-var-from-döngü)

Burada neler olduğuna dair bir ipucu veren var mı? Pilint kaynak kodundan açıklama şöyledir:

Kapanışta kullanılan bir değişken bir döngüde tanımlanır. Bu, kapalı değişken için aynı değeri kullanan tüm kapanışlarla sonuçlanacaktır.

Ama ne anlama geldiğine dair bir fikrim yok. Herhangi biri soruna bir örnek verebilir mi?


Ne tür bir nesne results? Sıradan liste mi? Başka bir şey?
Kevin


@Kevin ör. Sonuçlar = [{anahtar: değer}, {anahtar: değer} ...]
x,

Tamam. Bu durumda, buradaki uyarı için endişelenmenize gerek olmadığı konusunda chepner'a katılıyorum.
Kevin

Yanıtlar:


104

Fonksiyon gerçekten çağrıldığında sort_keygövdesindeki isim lambdaaranacak, böylece sort_keyen son sahip olduğu değeri görecek . sortHemen çağırdığınız için sort_key, sonuçta elde edilen işlev nesnesi kullanılmadan önce değeri değişmeyecektir, bu nedenle uyarıyı güvenle yok sayabilirsiniz. Susturmak için, sort_keybir parametrenin varsayılan değerini şu şekilde yapabilirsiniz lambda:

results.sort(key=lambda k, sk=sort_key: get_from_dot_path(k, sk),
             reverse=(order == -1))

5
Uyarıyı görmezden gelmek yerine sorunu çözme tarafında hata yaparım. Mümkünse key=partial(get_from_dot_path, foo=sort_key)lambda ifadesi yerine kullanırdım (bir anahtar kelime argümanı için kullanabileceğiniz bazı parametre adlarının footanımlandığı varsayılarak get_from_dot_path; partialyalnızca konumsal parametrelerin yalnızca soldan doldurulmasına izin verir).
chepner

1
Ah bunun sorunu çözeceğini bilmiyordum, eşdeğer olduklarını düşündüm; bu durumda katılıyorum.
2018

3
şu anda hilenin
Daniel Pinyol
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.