【问题标题】:Pylint invalid constant namePylint 无效的常量名
【发布时间】:2014-09-30 18:55:03
【问题描述】:

我收到关于我的常量的 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

【问题讨论】:

    标签: python coding-style pylint


    【解决方案1】:

    在检查名称时,Pylint 会区分常量、变量、类等。不在函数/类中的任何名称都将被视为常量,其他任何名称都是变量。

    http://docs.pylint.org/features.html#basic-checker

    变量-rgx:
    [a-z_][a-z0-9_]{2,30}$

    const-rgx:
    (([A-Z_][A-Z0-9_]*)|(__.*__))$

    因为你在一个函数中,MIN_SOIL_PARTICLE_DENS(根据 pylint)应该是一个变量,但是 pylint 将它视为一个常量,因此会抱怨。

    这意味着您不能在函数中使用任何大写名称而不会引起 pylint 抱怨。


    如果你问我,在函数内部使用大写字母是可以的;并非所有常量都必须全局定义。

    【讨论】:

    • 如果它是常量,为什么要为每次调用此方法重新分配其值?它可以在此方法之外定义。
    • @Maxime 我的想法是让方法独立(不需要外部常量),即使由于重新分配常量可能会降低性能。不过好点。
    • @user2457899 实际上,我也在我的方法中使用了常量。我只是想表达这个 pylint 规则背后的想法。 :)
    • 我不知道,我想我宁愿在函数之外有常量。如果它不是真正的全局常量,它应该是一个变量。
    • @MaximeChéramy 你能表达一下为什么func_name = make_func(1,2,3) 可能被认为是错误的想法吗?当前用例是 utils 模块中的 vlen = numpy.vectorize(len),用于处理 h5py 中的参差不齐的数组。
    【解决方案2】:

    几个简单的规则:

    1. 常量只能用UPPER_CASE 字母定义,并且应该在模块级别定义
    2. 类名应使用CamelCase 字母定义
    3. 变量应在lower_case 中定义,并应在函数、类等内部定义。

    现在让我们谈谈你的情况,

    MIN_SOIL_PARTICLE_DENS 在函数内部定义并且应该只有小写字母。因此,pylint 没有将 MIN_SOIL_PARTICLE_DENS 视为常量,而是将其视为变量,因此 pylint 错误。

    Pylint Tutorial

    【讨论】:

      【解决方案3】:

      我发现这种行为很烦人,但有一种方法可以配置 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

      【讨论】:

        猜你喜欢
        • 2016-01-09
        • 1970-01-01
        • 2012-06-04
        • 1970-01-01
        • 2020-10-30
        • 2021-11-24
        • 2020-05-18
        • 2020-03-27
        相关资源
        最近更新 更多