跳到内容

used-dummy-variable (RUF052)

有时提供修复。

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查“虚拟变量”(即命名方式表明其未被使用的变量),但实际上已被使用的情况。

默认情况下,“虚拟变量”是指任何名称以一个或多个前导下划线开头的变量。但是,可以使用 lint.dummy-variable-rgx 设置进行自定义。

为什么这不好?

用前导下划线标记变量表示该变量在函数或方法中有意未使用。当这些变量稍后在代码中被引用时,会导致混淆,并可能对代码的意图产生误解。如果标记为“未使用”的变量随后被使用,则表明该变量可以被赋予更清晰的名称,或者代码意外地使用了错误的变量。

有时使用前导下划线是为了避免变量遮蔽其他变量、Python 内置函数或 Python 关键字。但是,PEP 8 建议为此使用尾随下划线,而不是前导下划线。

双下划线变量和名为 _ 的变量会被此规则忽略。该规则仅标记函数范围内的局部变量。

示例

def function():
    _variable = 3
    # important: avoid shadowing the builtin `id()` function!
    _id = 4
    return _variable + _id

建议改为

def function():
    variable = 3
    # important: avoid shadowing the builtin `id()` function!
    id_ = 4
    return variable + id_

修复可用性

此规则的修复仅适用于以前导下划线开头的变量。 并且只有在变量的“显而易见”的新名称不会遮蔽变量定义范围内的任何其他已知变量时才可用。

修复安全性

此规则的修复被标记为不安全。

对于此规则的修复,Ruff 会重命名变量,并修复对它的所有已知引用,以便它们指向重命名的变量。 但是,某些重命名还需要其他更改,例如构造函数调用的不同参数或对注释的更改。 Ruff 知道其中一些情况:如果 _T 绑定被此规则标记,则 _T = TypeVar("_T") 将被修复为 T = TypeVar("T")。 然而,总的来说,这些情况很难检测并且很难自动修复。

Options (选项)