Bu kod snippet'i göz önüne alındığında:
from os import walk
files = []
for (dirpath, _, filenames) in walk(mydir):
# more code that modifies files
if len(files) == 0: # <-- C1801
return None
Pylint tarafından if ifadesi ile ilgili bu mesajla telaşlandım:
[pylint] C1801: Kullanmayın
len(SEQUENCE)
Koşul değeri olarak
İlk bakışta C1801 kuralı benim için çok makul gelmedi ve referans kılavuzundaki tanım bunun neden bir sorun olduğunu açıklamıyor. Aslında, düpedüz yanlış kullanım olarak adlandırır .
koşul olarak len (C1801) : Koşul değeri olarak kullanmayın
len(SEQUENCE)
Pylint koşullar içinde len (sekans) yanlış kullanımını tespit ettiğinde kullanılır.
Arama girişimlerim de bana daha derin bir açıklama yapamadı. Bir dizinin length özelliğinin tembel olarak değerlendirilebileceğini ve__len__
yan etkileri olacak şekilde programlanabileceğini anlıyorum, ancak bunun tek başına Pylint'in böyle bir kullanımı yanlış olarak adlandırması için yeterince sorunlu olup olmadığı tartışmalıdır. Bu nedenle, projemi kuralı göz ardı edecek şekilde yapılandırmadan önce, akıl yürütmemde bir şey eksik olup olmadığımı bilmek istiyorum.
len(SEQ)
Koşul değeri olarak kullanımı ne zaman sorunludur? Pylint C1801 ile hangi önemli durumlardan kaçınmaya çalışıyor?
len
çağrıldığı bağlamı bilmiyorsa, eğer uzunluğun hesaplanması tüm sekansın içinden geçmek anlamına geliyorsa, o olmalıdır; sonucun 0 ile karşılaştırıldığını bilmiyor. Boolean değerinin hesaplanması, dizinin gerçekte ne kadar uzun olduğuna bakılmaksızın, ilk öğeyi gördükten sonra durabilir. Bence pylint burada biraz düşünülüyor; Ne olduğunu her durum düşünemiyorum yanlış kullanımına len
alternatifinden daha kötü bir seçenek sadece.
if files:
yaif not files: