考虑这个代码片段:
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 对我来说听起来不太合理,而且参考指南上的定义 https://pylint.readthedocs.io/en/latest/reference_guide/features.html#id19没有解释为什么这是一个问题。事实上,它完全称其为不正确的使用.
镜头作为条件 (C1801):
不使用len(SEQUENCE)
作为条件值 当 Pylint 检测到条件内 len(sequence) 的错误使用时使用。
我的搜索尝试也未能为我提供更深入的解释。我确实理解序列的长度属性可能会被延迟评估,并且__len__
可以被编程为产生副作用,但值得怀疑的是,仅此一点是否就足以让 Pylint 称这种使用不正确。因此,在我简单地将项目配置为忽略该规则之前,我想知道我的推理中是否遗漏了某些内容。
什么时候使用len(SEQ)
作为条件值有问题吗? Pylint 试图使用 C1801 避免哪些主要情况?
什么时候使用len(SEQ)
作为条件值有问题吗?什么专业
Pylint 试图使用 C1801 避免哪些情况?
它不是really使用有问题len(SEQUENCE)
– 尽管它可能没有那么有效(参见切普纳的评论 https://stackoverflow.com/questions/43121340/why-is-the-use-of-lensequence-in-condition-values-considered-incorrect-by-pyli#comment73322508_43121340)。无论如何,Pylint 检查代码是否符合PEP 8 风格指南 https://www.python.org/dev/peps/pep-0008其中指出
对于序列(字符串、列表、元组),请使用空序列为 false 的事实。
Yes: if not seq:
if seq:
No: if len(seq):
if not len(seq):
作为一个偶尔在不同语言之间切换的 Python 程序员,我会考虑len(SEQUENCE)
构造更具可读性和更明确(“显式优于隐式”)。然而,利用空序列的计算结果为False
在布尔上下文中被认为更“Pythonic”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)