Pylint 无效的常量名
我在使用 Pylint 的时候遇到了一个错误,提示我的常量:MIN_SOIL_PARTICLE_DENS
(名字不合法)。有没有人知道为什么这个常量会出错?下面是我的完整函数:
def bulk_density(clay, sand, organic_matter):
MIN_SOIL_PARTICLE_DENS = 2.65
x1 = (0.078 + 0.278 * sand + 0.034 * clay + 0.022 * organic_matter - 0.018
* sand * organic_matter - 0.027 * clay * organic_matter - 0.584 * sand
* clay)
x2 = -0.107 + 1.636 * x1
field_capacity = vol_water_content_33_j_kg(clay, sand, organic_matter)#m3/m3
sat_water_content = 0.043 + field_capacity + x2 - 0.097 * sand
return (1 - sat_water_content) * MIN_SOIL_PARTICLE_DENS
3 个回答
1
我觉得这个行为挺烦人的,不过有办法可以设置pylint来避免这个问题!
你可以把下面这个ini格式的设置合并到你的.pylintrc
文件里:
[BASIC]
variable-rgx=((([a-z_][a-z0-9_]{2,})|(_[a-z0-9_]*)|(__[a-z][a-z0-9_]+__))$)|([A-Z_][A-Z0-9_]+$)
我这个正则表达式是通过以下方式构建的:
然后把它们用|
和一些括号连接起来。
理论上,你也可以直接用.*
,但这样会允许一些不合法的名字,比如mixed_CASE
。
1
几个简单的规则:
- 常量应该用全大写字母来定义,并且要在模块的最外层定义。
- 类名应该用驼峰式命名法,也就是每个单词的首字母都要大写。
- 变量应该用小写字母来定义,并且要在函数、类等内部定义。
现在我们来谈谈你的情况,
MIN_SOIL_PARTICLE_DENS
是在一个函数内部定义的,应该只用小写字母。因此,pylint并没有把MIN_SOIL_PARTICLE_DENS
当作常量,而是当作变量来处理,所以才会出现pylint的错误。
110
在检查名字的时候,Pylint会区分常量、变量、类等等。任何不在函数或类里的名字都会被认为是常量,而其他的则被视为变量。
你可以查看这个链接了解更多信息:http://docs.pylint.org/features.html#basic-checker
变量的规则:
[a-z_][a-z0-9_]{2,30}$
常量的规则:
(([A-Z_][A-Z0-9_]*)|(__.*__))$
因为你在一个函数里,所以MIN_SOIL_PARTICLE_DENS
(根据Pylint的说法)应该是一个变量,但Pylint却把它当成常量来处理,因此会发出警告。
这意味着在函数内部,如果你使用大写字母的名字,Pylint就会发出警告。
如果你问我的话,我觉得在函数里使用大写字母是没问题的;并不是所有的常量都一定是全局定义的。