Mempertimbangkan cuplikan kode ini:
from os import walk
files = []
for (dirpath, _, filenames) in walk(mydir):
# more code that modifies files
if len(files) == 0: # <-- C1801
return None
Saya terkejut oleh Pylint dengan pesan ini mengenai baris dengan pernyataan if:
[pylint] C1801: Jangan gunakan
len(SEQUENCE)
sebagai nilai kondisi
Aturan C1801, pada pandangan pertama, tidak terdengar sangat masuk akal bagi saya, dan definisi pada panduan referensi tidak menjelaskan mengapa ini menjadi masalah. Bahkan, itu benar-benar menyebutnya penggunaan yang salah .
len-as-condition (C1801) : Jangan gunakan
len(SEQUENCE)
sebagai nilai kondisi Digunakan ketika Pylint mendeteksi penggunaan salah len (urutan) di dalam kondisi.
Upaya pencarian saya juga gagal memberi saya penjelasan yang lebih dalam. Saya mengerti bahwa properti panjang urutan dapat dievaluasi dengan malas, dan yang __len__
dapat diprogram untuk memiliki efek samping, tetapi dipertanyakan apakah itu saja yang cukup bermasalah bagi Pylint untuk menyebut penggunaan seperti itu salah. Oleh karena itu, sebelum saya cukup mengkonfigurasi proyek saya untuk mengabaikan aturan, saya ingin tahu apakah saya kehilangan sesuatu dalam alasan saya.
Kapan penggunaan len(SEQ)
sebagai nilai kondisi bermasalah? Situasi utama apa yang berusaha dihindari oleh Pylint dengan C1801?
len
tidak tahu konteks di mana ia dipanggil, jadi jika menghitung panjang berarti melintasi seluruh urutan, ia harus; tidak tahu bahwa hasilnya hanya dibandingkan dengan 0. Menghitung nilai boolean dapat berhenti setelah melihat elemen pertama, terlepas dari berapa lama urutan sebenarnya. Saya pikir pylint sedang sedikit berpendapat di sini, meskipun; Saya tidak bisa memikirkan situasi di mana itu salah untuk digunakan len
, hanya saja itu pilihan yang lebih buruk daripada alternatifnya.
if files:
atauif not files: