这段代码中 _
之后 for
是什么意思?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
原文由 alwbtc 发布,翻译遵循 CC BY-SA 4.0 许可协议
这段代码中 _
之后 for
是什么意思?
if tbh.bag:
n = 0
for _ in tbh.bag.atom_set():
n += 1
原文由 alwbtc 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答974 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
_
在Python中有3个主要的常规用途:在交互式解释器会话中保存最后执行的表达式的结果(请参阅 文档)。这个先例是由标准的 CPython 解释器开创的,其他解释器也纷纷效仿
对于 i18n 中的翻译查找(例如,请参阅 gettext 文档),如代码中所示
作为通用的“一次性”变量名:
def
或lambda
),其中签名是固定的(例如通过回调或父类 API),但此特定函数实现不需要所有参数,如代码所示:[很长一段时间以来,这个答案都没有列出这个用例,但它经常出现,如此 处 所述,值得明确列出。]
此用例可能与翻译查找用例冲突,因此有必要避免在任何代码块中使用
_
作为一次性变量,同时将其用于 i18n 翻译(许多人更喜欢双下划线,__
,正是出于这个原因,作为他们的一次性变量)。Linters 经常识别这个用例。例如
year, month, day = date()
day
引发 lint 警告。如果day
确实不需要,则修复方法是编写year, month, _ = date()
。与 lambda 函数相同,lambda arg: 1.0
创建一个需要一个参数但不使用它的函数,这将被 lint 捕获。修复方法是编写lambda _: 1.0
。未使用的变量通常隐藏错误/拼写错误(例如设置day
但在下一行使用dya
)。Python 3.10 中添加的模式匹配功能将此用法从“约定”提升为“语言语法”,其中
match
涉及语句:在匹配情况下,_
是 通配符模式,并且在这种情况下,运行时甚至不会将值绑定到符号。对于其他用例,请记住
_
仍然是一个有效的变量名,因此仍会使对象保持活动状态。如果这是不可取的(例如,释放内存或外部资源),显式的del name
调用将满足 linters 的名称正在使用, 并 迅速清除对该对象的引用。