gpt4 book ai didi

python - Python中单个下划线 "_"变量的目的是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:01:16 25 4
gpt4 key购买 nike

这段代码中for后面的_是什么意思?

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

最佳答案

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

  1. 将最后执行的表达式的结果保存在交互式口译 session (见 docs)。这个先例是由标准 CPython口译员,其他口译员也纷纷效仿

  2. 对于 i18n 中的翻译查找(参见 gettext例如文档),就像在代码中一样

    raise forms.ValidationError(_("Please enter a correct username"))
  3. 作为通用的“一次性”变量名:

    1. 表示那部分函数的结果被故意忽略(从概念上讲,它被丢弃了。),如下代码:

      label, has_label, _ = text.partition(':')
    2. 作为函数定义的一部分(使用 deflambda),其中签名是固定的(例如通过回调或父类 API),但是这个特定的功能实现不需要所有参数,如代码中的:

      def callback(_):
      return True

      [很长一段时间以来,这个答案都没有列出这个用例,但它经常出现,如 here 所述。 ,值得明确列出。]

    此用例可能与翻译查找用例发生冲突,因此有必要避免将 _ 用作任何代码块中的一次性变量,该代码块也将其用于 i18n 翻译(许多人更喜欢双下划线,__,正是出于这个原因,作为他们的一次性变量)。

    Linter 通常会识别这种用例。例如 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 语句的“语言语法”:在匹配情况下,_wildcard pattern ,在这种情况下,运行时甚至不会将值绑定(bind)到符号。

    对于其他用例,请记住 _ 仍然是一个有效的变量名,因此仍然可以保持对象处于事件状态。在不希望这样做的情况下(例如释放内存或外部资源),显式 del name 调用将满足正在使用该名称的 linter, 立即清除引用到对象。

关于python - Python中单个下划线 "_"变量的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com