问题:为什么pylint反对单字符变量名?
我仍然习惯于使用python约定并使用pylint
使我的代码更具pythonic风格,但是我对pylint不喜欢单字符变量名感到困惑。我有几个这样的循环:
for x in x_values:
my_list.append(x)
当我运行时pylint
,我得到Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30}
-这表明一个有效的变量名长度必须在3到31个字符之间,但是我浏览了PEP8命名约定,但没有看到任何有关单个小写字母的明确信息,我确实看到了很多使用它们的示例。
在PEP8中我缺少什么还是这是pylint特有的标准?
回答 0
PyLint不仅检查PEP8建议。它也有自己的建议,其中之一就是变量名应具有描述性且不能太短。
您可以使用它来避免这样的短名称:
my_list.extend(x_values)
或调整PyLint的配置,以告诉PyLint什么变量名是好的。
回答 1
回答 2
在强类型语言中,1个字母的名称变量可能没问题,因为通常会在变量的声明中或函数/方法原型中获得名称旁边的类型:
bool check_modality(string a, Mode b, OptionList c) {
ModalityChecker v = build_checker(a, b);
return v.check_option(c);
}
在Python中,您不会获得此信息,因此,如果您编写:
def check_modality(a, b, c):
v = build_checker(a, b)
return v.check_option(c)
对于该功能可以做什么,如何调用以及返回什么,您绝对不会给维护团队提供任何线索。因此,在Python中,您倾向于使用描述性名称:
def check_modality(name, mode, option_list):
checker = build_checker(name, mode)
return checker.check_option(option_list)
您甚至可以添加一个文档字符串来说明这些东西的作用以及期望的类型。
回答 3
如今,还有一个选项可以覆盖正则表达式。即,如果您想允许单个字符作为变量:
pylint --variable-rgx="[a-z0-9_]{1,30}$" <filename>
因此,pylint
将与PEP8相匹配,并且不会带来其他违规行为。您也可以将其添加到中.pylintrc
。
回答 4
更深层次的原因是,你可能还记得你的原意a
,b
,c
,x
,y
,和z
是指当你写你的代码,但是当别人读它,甚至当你回到你的代码,代码变得更加可读当你给它是一个语义名称。我们不会在黑板上写东西然后再擦除它。我们正在编写的代码可能会存在十年或更长时间,并且会被阅读很多次。
使用语义名称。我使用语义的名称一直喜欢ratio
,denominator
,obj_generator
,path
,等这可能需要额外的两秒钟他们打出来,但是你节省试图找出你所写的,甚至一半,然后一小时的时间是值得的。