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

时间:2011-05-05 05:44:19

标签: python variables naming-conventions metasyntactic-variable

此代码中_之后for的含义是什么?

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

5 个答案:

答案 0 :(得分:675)

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

  1. 将最后执行的表达式(/ statement)的结果保存在交互式中 口译员会议。这个先例是由标准的CPython设定的 口译员和其他口译员也纷纷效仿
  2. 用于i18n中的翻译查找(参见 gettext 例如文档),如代码所示: raise forms.ValidationError(_("Please enter a correct username"))
  3. 作为通用“一次性”变量名称来表示该部分 函数结果被故意忽略,如代码所示: label, has_label, _ = text.partition(':')
  4. 后两个目的可能会发生冲突,因此有必要避免在任何代码块中使用_作为一次性变量,该代码块也将其用于i18n转换(许多人更喜欢双下划线,{{1} },作为他们的一次性变量,正是出于这个原因)。

答案 1 :(得分:175)

它只是一个变量名,并且在python中常规使用_表示一次性变量。它只表示实际上没有使用循环变量。

答案 2 :(得分:54)

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

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

    >>> 10 
    10
    
    >>> _ 
    10
    
    >>> _ * 3 
    30
    
  • 下划线_也用于忽略特定值。如果您不需要特定值或未使用这些值,只需将值指定为下划线。

    解包时忽略一个值

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

    忽略索引

    for _ in range(10):     
        do_something()
    

答案 3 :(得分:15)

在Python中使用下划线有5种情况。

  1. 用于存储解释器中最后一个表达式的值。

  2. 忽略特定值。 (所谓的“我不在乎”)

  3. 赋予vartiables或函数名称特殊的含义和功能。

  4. 用作'国际化(i18n)'或'本地化(l10n)'功能。

  5. 分隔数字文字值的数字。

  6. Here是一篇很好的文章,其中包含mingrammer的例子。

答案 4 :(得分:0)

就Python语言而言,_没有特殊含义。与_foofoo__f_o_o_一样,它是有效的identifier

_的任何特殊含义纯属约定。常见几种情况:

  • 当不打算使用变量但语法/语义要求使用变量时的虚拟名称。

    # iteration disregarding content
    sum(1 for _ in some_iterable)
    # unpacking disregarding specific elements
    head, *_ = values
    # function disregarding its argument
    def callback(_): return True
    
  • 许多REPL / shell将最后一个顶级表达式的结果存储到builtins._

      

    在交互式解释器中使用特殊标识符_来存储上一次评估的结果;它存储在builtins模块中。当不在交互模式下时,_没有特殊含义,因此未定义。 [source]

    由于查找名称的方式,除非全局或本地_定义将其遮盖,否则裸露的_指的是builtins._

    >>> 42
    42
    >>> f'the last answer is {_}'
    'the last answer is 42'
    >>> _
    'the last answer is 42'
    >>> _ = 4  # shadow ``builtins._`` with global ``_``
    >>> 23
    23
    >>> _
    4
    

    注意::某些外壳程序(例如ipython不会分配给builtins._,而是特殊情况的_

  • 在上下文国际化和本地化中,_用作主要翻译功能的别名。

      

    gettext.gettext(message)

         

    根据当前的全局域,语言和语言环境目录返回消息的本地化翻译。在本地名称空间中,此函数通常被别名为_()(请参见下面的示例)。