为什么pylint对象是单个字符variables名?

我仍然习惯于python约定和使用pylint使我的代码更pylint ,但我感到困惑的事实,pylint不喜欢单个字符variables名称。 我有几个这样的循环:

 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} – 这表明有效的variables名称必须介于3和31个字符长,但我已经通过PEP8命名约定 ,我没有看到任何明确的单个小写字母,我看到很多使用它们的例子。

在PEP8中是否有我缺less的东西,或者这是对pylint独特的标准吗?

PyLint不仅检查PEP8推荐。 它也有自己的build议,其中一个是variables名应该是描述性的,不能太短。

您可以使用它来避免这样的短名称:

 my_list.extend(x_values) 

或者使用_作为临时variables的占位符(正则expression式将通过)

关于什么gurney亚历克斯注意到一点点细节:你可以告诉PyLint作出(即使小于三个字符)的variables名称 (你小指发誓)是完全清晰的例外。 查找或添加到您的pylint.rc文件中:

 # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_,pk,x,y 

这里pk(主键),x和y是我添加的variables名称。

在强types语言中,1个字母的名称variables可以是ok-ish,因为通常在variables的声明或函数/方法原型中获得名称旁边的types:

 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) 

你甚至可以添加一个文档string来解释这些东西的作用和预期的types。

更深的原因是,你可能记得你写abcxyz的意思是当你写代码的时候,而其他人读的时候,甚至当你回到你的代码时,代码就变成当你给它一个语义的名字时更可读。 我们不是在黑板上写东西,然后把它擦掉。 我们正在编写可能会存在十年或更长时间的代码,并且可以多次阅读。

使用语义名称。 我使用的语义名称就像是ratiodenominatorobj_generatorpath等。input它们可能需要一两秒钟的时间,但是当你节省时间试图弄清楚你写了甚么半小时是非常值得的。