协慌网

登录 贡献 社区

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

这段代码_ after for的含义是什么?

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

答案

_在 Python 中有 3 种主要的常规用法:

  1. 在交互式解释器会话中保存最后执行的 expression(/ statement)的结果(请参阅docs )。此先例是由标准 CPython 解释器设定的,其他解释器也纷纷效仿

  2. 在 i18n 中进行翻译查找(例如,参见 gettext文档),如代码所示

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

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

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

      def callback(_):
          return True

      [很长一段时间这个答案没有列出这种使用情况,但一出来就往往不够,如上所述这里,值得列出明确。]

    该用例可能与翻译查找用例冲突,因此有必要避免在也将其用于 i18n 翻译的任何代码块中都_ __用作抛弃变量正是出于这个原因)。

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

它只是一个变量名,在 python 中,通常使用_来表示一次性变量。它只是表明循环变量并未实际使用。

下划线_在 Python 中被视为 “我不在乎” 或 “抛出” 变量

  • python 解释器将最后一个表达式值存储到名为_的特殊变量中。

    >>> 10 
    10
    
    >>> _ 
    10
    
    >>> _ * 3 
    30
  • 下划线_也用于忽略特定值。如果不需要特定值或不使用这些值,只需将这些值分配给下划线即可。

    拆箱时忽略值

    x, _, y = (1, 2, 3)
    
    >>> x
    1
    
    >>> y 
    3

    忽略索引

    for _ in range(10):     
        do_something()