此代码中_
之后for
的含义是什么?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
答案 0 :(得分:675)
_
在Python中有3个主要的常规用法:
raise forms.ValidationError(_("Please enter a correct username"))
label, has_label, _ = text.partition(':')
后两个目的可能会发生冲突,因此有必要避免在任何代码块中使用_
作为一次性变量,该代码块也将其用于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种情况。
用于存储解释器中最后一个表达式的值。
忽略特定值。 (所谓的“我不在乎”)
赋予vartiables或函数名称特殊的含义和功能。
用作'国际化(i18n)'或'本地化(l10n)'功能。
分隔数字文字值的数字。
Here是一篇很好的文章,其中包含mingrammer的例子。
答案 4 :(得分:0)
就Python语言而言,_
没有特殊含义。与_foo
,foo_
或_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._
,而是特殊情况的_
。
在上下文国际化和本地化中,_
用作主要翻译功能的别名。
根据当前的全局域,语言和语言环境目录返回消息的本地化翻译。在本地名称空间中,此函数通常被别名为_()(请参见下面的示例)。