小编典典

Python中单个下划线“_”变量的目的是什么?

all

这段代码中的_after是什么意思?for

if tbh.bag:
    n = 0
    for _ in tbh.bag.atom_set():
        n += 1

阅读 104

收藏
2022-03-03

共1个答案

小编典典

_在 Python 中有 3 个主要的常规用途:

  1. 在交互式解释器会话中保存最后执行的表达式的结果(请参阅文档)。这个先例是由标准 CPython 解释器开创的,其他解释器也纷纷效仿

  2. 对于 i18n 中的翻译查找(例如,参见 gettext 文档),如代码中所示

    raise forms.ValidationError(_("Please enter a correct username"))
    
  3. 作为通用的“一次性”变量名:

    1. 表示函数结果的一部分被故意忽略(从概念上讲,它被丢弃了。),如代码所示:

          label, has_label, _ = text.partition(':')
      
    2. 作为函数定义的一部分(使用deflambda),其中签名是固定的(例如,通过回调或父类 API),但这个特定的函数实现不需要所有参数,如下代码所示:

          def callback(_):
      return True
      

此用例可能与翻译查找用例发生冲突,因此有必要避免_在任何也将其用于 i18n 翻译的代码块中用作一次性变量(许多人更喜欢双下划线__,
作为他们的一次性变量这个原因)。

Linter 通常会识别此用例。例如,如果稍后在代码中未使用,year, month, day = date()则会引发 lint
警告。day如果day确实不需要,解决方法是编写year, month, _ = date(). 与 lambda 函数相同,lambda arg: 1.0创建一个需要一个参数但不使用它的函数,它将被 lint 捕获。解决方法是编写lambda _: 1.0.
未使用的变量通常隐藏错误/错字(例如设置daydya在下一行中使用)。

Python 3.10
中添加的模式匹配功能将这种用法从“约定”提升为“语言语法”,其中match涉及语句:在匹配情况下,_通配符模式,在这种情况下运行时甚至不会将值绑定到符号.

对于其他用例,请记住它_仍然是一个有效的变量名,因此仍将保持对象处于活动状态。在不希望这样做的情况下(例如释放内存或外部资源),显式del name调用将满足正在使用该名称的 linter, 立即清除对对象的引用。

2022-03-03