问题:Python中单个下划线“ _”变量的用途是什么?
此代码中的_
after 是什么意思for
?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
回答 0
_
在Python中有4种主要的常规用法:
- 在交互式解释器会话中保存上次执行的表达式的结果。此先例是由标准CPython解释器设置的,其他解释器也纷纷效仿
- 有关在i18n中进行翻译查找的信息,请参见
gettext
例如,文档),如代码所示:
raise forms.ValidationError(_("Please enter a correct username"))
- 作为通用“一次性”的变量名指示函数结果的一部分被故意忽略(在概念上,它被丢弃。),如类似的代码:
label, has_label, _ = text.partition(':')
。 - 作为函数定义的一部分(使用
def
或lambda
),其中的签名是固定的(例如,通过回调或父类API),但是此特定函数实现不需要所有参数,如代码所示:callback = lambda _: True
(很长一段时间以来,这个答案只列出了前三个用例,但是第四个用例经常出现,如前所述 这里,将值得明确列出)
后者的“抛弃型变量或参数名称”用例可能与翻译查找用例冲突,因此有必要避免_
在也将其用于i18n转换的任何代码块中将其用作抛弃型变量(许多人更喜欢双下划线,__
正是由于这个原因而将其作为一次性变量)。
回答 1
它只是一个变量名,在python中通常_
用于丢弃变量。它仅表示循环变量未实际使用。
回答 2
下划线在Python中_
被视为“ 我不在乎 ”或“ 抛出 ”变量
python解释器将最后一个表达式值存储到名为的特殊变量中
_
。>>> 10 10 >>> _ 10 >>> _ * 3 30
下划线
_
也用于忽略特定值。如果不需要特定值或不使用这些值,只需将这些值分配给下划线即可。开箱时忽略值
x, _, y = (1, 2, 3) >>> x 1 >>> y 3
忽略索引
for _ in range(10): do_something()
回答 3
在Python中使用下划线有5种情况。
用于将最后一个表达式的值存储在解释器中。
用于忽略特定值。(所谓的“我不在乎”)
给变量或函数的名称赋予特殊的含义和功能。
用作“国际化(i18n)”或“本地化(l10n)”功能。
分隔数字文字值的数字。
这是一篇不错的文章,上面有mingrammer的示例。
回答 4
就Python语言而言,_
没有特殊含义。与或一样,它是有效的标识符。_foo
foo_
_f_o_o_
的任何特殊含义_
纯属约定。常见几种情况:
如果不打算使用变量,但是语法/语义需要一个虚拟名称。
# 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
模块中。如果不在交互模式下,_
则没有特殊含义并且未定义。[ 来源 ]由于查找名称的方式,除非由全局或局部
_
定义遮盖,否则裸_
指的是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._
而是特例_
。在上下文中,国际化和本地化
_
用作主要翻译功能的别名。根据当前的全局域,语言和语言环境目录,返回消息的本地化翻译。在本地命名空间中,此函数通常别名为_()(请参见下面的示例)。