इस कोड को ध्यान में रखते हुए स्निपेट:
from os import walk
files = []
for (dirpath, _, filenames) in walk(mydir):
# more code that modifies files
if len(files) == 0: # <-- C1801
return None
यदि इस कथन के साथ लाइन के बारे में इस संदेश के साथ मुझे Pylint ने चिंतित किया:
[pylint] C1801:
len(SEQUENCE)
शर्त मूल्य के रूप में उपयोग न करें
नियम C1801, पहली नज़र में, मेरे लिए बहुत उचित नहीं लगा, और संदर्भ गाइड पर परिभाषा यह नहीं बताती है कि यह एक समस्या क्यों है। वास्तव में, यह सर्वथा इसे गलत उपयोग कहता है ।
len-as-condition (C1801) : जब Pylint, लीन (अनुक्रम) का गलत इस्तेमाल करता है, तो कंडीशन वैल्यू के रूप में इस्तेमाल न करें
len(SEQUENCE)
।
मेरे खोज प्रयास भी मुझे गहरी व्याख्या प्रदान करने में विफल रहे हैं। मैं समझता हूं कि अनुक्रम की लंबाई की संपत्ति का आलसी मूल्यांकन किया जा सकता है, और __len__
इसका साइड इफेक्ट होने के लिए प्रोग्राम किया जा सकता है, लेकिन यह संदेहास्पद है कि क्या केवल पाइलिंट के लिए पर्याप्त समस्याग्रस्त है कि इस तरह के उपयोग को गलत कहा जाए। इसलिए, इससे पहले कि मैं नियम को अनदेखा करने के लिए बस अपनी परियोजना को कॉन्फ़िगर करूं, मैं जानना चाहूंगा कि क्या मुझे अपने तर्क में कुछ याद नहीं है।
जब len(SEQ)
एक स्थिति मूल्य समस्याग्रस्त के रूप में उपयोग किया जाता है? पाइल्ट C1801 से बचने के लिए किन प्रमुख स्थितियों में प्रयास कर रहा है?
len
उस संदर्भ को नहीं जानता जिसमें इसे कहा जाता है, इसलिए यदि लंबाई की गणना का अर्थ है पूरे अनुक्रम का पता लगाना, तो यह अवश्य होगा; यह नहीं पता है कि परिणाम की तुलना सिर्फ 0. से की जा रही है। बूलियन मान को कम करना तब बंद हो सकता है जब यह पहला तत्व देखता है, वास्तव में यह क्रम कितना लंबा है, इसकी परवाह किए बिना। मुझे लगता है कि pylint यहाँ एक बालक राय है, हालांकि; मैं ऐसी किसी भी स्थिति के बारे में नहीं सोच सकता जहाँ इसका इस्तेमाल करना गलत है len
, बस यह विकल्प से भी बदतर विकल्प है।
if files:
याif not files: