考虑到这段代码片段:

from os import walk

files = []
for (dirpath, _, filenames) in walk(mydir):
    # More code that modifies files
if len(files) == 0: # <-- C1801
    return None

Pylint对这条关于if语句行的消息感到震惊:

[pylint]C1801:不要使用len(SEQUENCE)作为条件值

乍一看,C1801规则听起来不太合理,definition on the reference guide规则也不能解释为什么这是一个问题.事实上,它直截了当地称之为incorrect use.

len-as-condition (C1801):

我的搜索try 也未能为我提供更深入的解释.我知道序列的长度属性可能会被延迟判断,__len__可以被编程为有副作用,但单是这一点就足以让Pylint认为这样的使用是不正确的,这是值得怀疑的.因此,在我简单地将我的项目配置为忽略规则之前,我想知道我的推理是否遗漏了一些东西.

何时将len(SEQ)用作条件值有问题?对于C1801,Pylint试图避免哪些主要情况?

推荐答案

何时使用len(SEQ)作为条件值有问题?什么专业

使用len(SEQUENCE)没有问题——尽管它可能没有那么有效(见chepner’s comment).不管怎样,Pylint都会判断代码是否符合PEP 8 style guide的要求,其中指出

对于序列(字符串、列表、元组),使用空序列为false这一事实.

Yes: if not seq:
     if seq:

No:  if len(seq):
     if not len(seq):

作为偶尔在不同语言之间切换的Python程序员,我认为len(SEQUENCE) struct 更具可读性和显式("显式比隐式更好").然而,在布尔上下文中使用空序列计算结果为False这一事实被认为更"Pythonic".

Python相关问答推荐

使用Python从HTTP打印值

Python在通过Inbox调用时给出不同的响应

脚注在Python中使用regex导致错误匹配

将行从一个DF添加到另一个DF

使用多个性能指标执行循环特征消除

指示组内的rejected_time是否在creation_timestamp后5分钟内

跟踪我已从数组中 Select 的样本的最有效方法

使用LineConnection动画1D数据

提取两行之间的标题的常规表达

pandas DataFrame GroupBy.diff函数的意外输出

抓取rotowire MLB球员新闻并使用Python形成表格

如何避免Chained when/then分配中的Mypy不兼容类型警告?

在Python Attrs包中,如何在field_Transformer函数中添加字段?

如何使用数组的最小条目拆分数组

计算组中唯一值的数量

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

实现神经网络代码时的TypeError

计算天数

提高算法效率的策略?

在Google Drive中获取特定文件夹内的FolderID和文件夹名称