Ama*_*nda 87 python naming-conventions pylint
我仍然习惯于使用python约定并使用它pylint来使我的代码更加pythonic,但我对pylint不喜欢单个字符变量名这一事实感到困惑.我有几个像这样的循环:
for x in x_values:
my_list.append(x)
Run Code Online (Sandbox Code Playgroud)
当我跑pylint,我得到Invalid name "x" for type variable (should match [a-z_][a-z0-9_]{2,30}- 这表明有效的变量名称必须在3到31个字符之间,但我已经查看了PEP8命名约定,我没有看到关于单个小写字母的任何明确的,我确实看到很多使用它们的例子.
PEP8中是否存在我缺少的东西,或者这是pylint独有的标准?
mln*_*ncn 99
关于gurney alex注意到的更多细节:你可以告诉PyLint为变量名做出例外情况(即你小指发誓)即使少于三个字符也是非常清楚的.在标题下查找或添加到您的pylintrc文件[FORMAT]:
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_,pk,x,y
Run Code Online (Sandbox Code Playgroud)
这里pk(对于主键),x和y是我添加的变量名.
war*_*iuc 47
PyLint不仅检查PEP8建议.它也有自己的建议,其中之一是变量名称应该是描述性的而不是太短.
您可以使用它来避免这么短的名字:
my_list.extend(x_values)
Run Code Online (Sandbox Code Playgroud)
或者调整PyLint的配置以告诉PyLint哪个变量名称是好的.
gur*_*lex 18
在强类型语言中,1个字母的名称变量可以是ok-ish,因为您通常会在变量声明或函数/方法原型中获取名称旁边的类型:
bool check_modality(string a, Mode b, OptionList c) {
ModalityChecker v = build_checker(a, b);
return v.check_option(c);
}
Run Code Online (Sandbox Code Playgroud)
在Python中,你没有得到这些信息,所以如果你写:
def check_modality(a, b, c):
v = build_checker(a, b)
return v.check_option(c)
Run Code Online (Sandbox Code Playgroud)
对于维护团队来说,你完全不知道该功能可以做什么,它是如何调用的,以及它返回的内容.所以在Python中,您倾向于使用描述性名称:
def check_modality(name, mode, option_list):
checker = build_checker(name, mode)
return checker.check_option(option_list)
Run Code Online (Sandbox Code Playgroud)
你甚至可以添加一个docstring来解释这些东西的作用以及预期的类型.
Jim*_*ian 16
现在还有一个覆盖regexp的选项.即如果你想允许单个字符作为变量:
pylint --variable-rgx="[a-z0-9_]{1,30}$" <filename>
Run Code Online (Sandbox Code Playgroud)
因此,pylint将匹配PEP8并且不会在顶部带来额外的违规.您也可以将其添加到.pylintrc.
Aar*_*all 15
更深层次的原因是,你可能还记得你的原意a,b,c,x,y,和z是指当你写你的代码,但是当别人读它,甚至当你回到你的代码,该代码将成为当你给更可读它是一个语义名称.我们不是在黑板上写东西然后擦除它.我们编写的代码可能会持续十年或更长时间,并且可以多次阅读.
使用语义名称.我使用语义的名称一直喜欢ratio,denominator,obj_generator,path,等这可能需要额外的两秒钟他们打出来,但是你节省时间试图找出你从那么写,甚至半小时是值得的.
wis*_*cky 13
pylint 现在有good-names-rgxs,它添加了额外的正则表达式模式以允许变量名称。
不同之处在于,这variable-rgx将覆盖任何先前的规则,而good-names-rgxs在现有规则之上添加规则。这使得它更加灵活,因为您无需担心违反以前的规则。
只需添加此行即可pylintrc允许 1 或 2 个长度的变量名称:
good-names-rgxs=^[_a-z][_a-z0-9]?$
^ # starts with
[_a-z] # 1st character required
[_a-z0-9]? # 2nd character optional
$ # ends with
Run Code Online (Sandbox Code Playgroud)