Python 中单下划线“_”变量的用途是什么?
- 2024-11-19 08:38:00
- admin 原创
- 10
问题描述:
这段代码中的_
after是什么意思?for
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
解决方案 1:
_
在 Python 中有 3 个主要常规用途:
在交互式解释器会话中保存最后执行的表达式的结果(参见文档)。这个先例是由标准 CPython 解释器设定的,其他解释器也纷纷效仿
对于 i18n 中的翻译查找(例如,请参阅
gettext
文档),如代码所示
raise forms.ValidationError(_("Please enter a correct username"))
作为通用的“一次性”变量名:
1. 表示函数结果的一部分被故意忽略(从概念上讲,它被丢弃了),如以下代码:
label, has_label, _ = text.partition(':')
2. 作为函数定义的一部分(使用`def`或`lambda`),其中签名是固定的(例如通过回调或父类 API),但此特定函数实现不需要所有参数,如以下代码所示:
def callback(_):
return True
[很长一段时间以来,这个答案都没有列出这种用例,但正如这里指出的那样,它出现得足够频繁,值得明确列出。]此用例可能与翻译查找用例相冲突,因此有必要避免`_`在任何将其用于 i18n 翻译的代码块中将其用作一次性变量(许多人正是`__`出于这个原因更喜欢使用双下划线作为一次性变量)。
Linters 经常会识别这种用例。例如,如果代码中后面没有使用,year, month, day = date()
则会引发 lint 警告。如果确实不需要,解决方法是编写。与 lambda 函数相同,创建一个需要一个参数但不使用它的函数,它将被 lint 捕获。解决方法是编写。未使用的变量通常会隐藏错误/拼写错误(例如,设置但在下一行中使用)。day
`dayyear, month, _ = date()
lambda arg: 1.0lambda _: 1.0
day`dya
Python 3.10 中添加的模式匹配功能将这种用法从“约定”提升到了“语言语法”,就match
语句而言:在匹配情况下,_
是一个通配符模式,并且运行时甚至不会在这种情况下将值绑定到符号。
对于其他用例,请记住这_
仍然是一个有效的变量名,因此仍将保持对象处于活动状态。在不希望出现这种情况的情况下(例如释放内存或外部资源),显式del name
调用既可以满足正在使用该名称的 linters 要求,又可以立即清除对该对象的引用。
解决方案 2:
它只是一个变量名,在 Python 中,习惯上将其用作一次性_
变量。它只是表示循环变量实际上并未使用。
解决方案 3:
在 Python 中,下划线_
被视为“我不关心”或“一次性”变量
Python 解释器将最后一个表达式的值存储到名为 的特殊变量中
_
。
>>> 10
10
>>> _
10
>>> _ * 3
30
下划线
_
也用于忽略具体值。如果不需要具体值或不使用这些值,只需将这些值赋给下划线即可。
解包时忽略某个值
x, _, y = (1, 2, 3)
>>> x
1
>>> y
3
忽略索引
for _ in range(10):
do_something()
解决方案 4:
Python 中使用下划线的情况有 5 种。
用于存储解释器中最后一个表达式的值。
用于忽略具体值。(所谓的“我不在乎”)
赋予变量或函数的名称特殊的含义和功能。
用作‘国际化 (i18n)’或‘本地化 (l10n)’功能。
用于分隔数字字面值的数字。
这是mingrammer撰写的一篇包含示例的精彩文章。
解决方案 5:
对于 Python 语言而言,_
一般没有特殊含义。 它是一个有效的标识符,就像_foo
、foo_
或 一样_f_o_o_
。
唯一的例外是match
自 Python 3.10 以来的语句:
在语句
case
中的模式中match
,_
是一个表示通配符的软关键字。来源
否则, 的任何特殊含义_
都纯粹是惯例。以下是几种常见情况:
当变量不打算使用,但是语法/语义需要名称时,可使用虚拟名称。
# 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
注意:某些 shell 如ipython
不分配给builtins._
而是特殊情况_
。
在国际化和本地化的背景下,
_
用作主要翻译功能的别名。
gettext.gettext(消息)
根据当前全局域、语言和区域设置目录返回消息的本地化翻译。此函数通常别名为
_()
本地命名空间(参见下面的示例)。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件