Python中单个下划线“ _”变量的用途是什么?

这段代码中_ after for的含义是什么?

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

#1楼

下划线_Python中被视为“ 我不在乎 ”或“ 抛出 ”变量

  • python解释器将最后一个表达式值存储到名为_的特殊变量中。

     >>> 10 10 >>> _ 10 >>> _ * 3 30 
  • 下划线_也用于忽略特定值。 如果不需要特定值或不使用这些值,只需将这些值分配给下划线即可。

    开箱时忽略值

     x, _, y = (1, 2, 3) >>> x 1 >>> y 3 

    忽略索引

     for _ in range(10): do_something() 

#2楼

在Python中使用下划线有5种情况。

  1. 用于将最后一个表达式的值存储在解释器中。

  2. 用于忽略特定值。 (所谓的“我不在乎”)

  3. 给变量或函数的名称赋予特殊的含义和功能。

  4. 用作“国际化(i18n)”或“本地化(l10n)”功能。

  5. 分隔数字文字值的数字。

是一篇不错的文章,上面有mingrammer的示例。


#3楼

这只是一个变量名,在python中,通常使用_来表示一次性变量。 它仅表示循环变量未实际使用。


#4楼

_在Python中有4种主要的常规用法:

  1. 在交互式解释器会话中保存上次执行的表达式的结果。 此先例是由标准CPython解释器设置的,其他解释器也纷纷效仿
  2. 对于在i18n中进行翻译查找(例如,请参见gettext文档),如以下代码所示: raise forms.ValidationError(_("Please enter a correct username"))
  3. 作为通用的“丢弃”变量名,表示有意忽略函数结果的一部分(从概念上讲,它被舍弃了。),如代码中所示: label, has_label, _ = text.partition(':')
  4. 作为函数定义的一部分(使用deflambda ),签名是固定的(例如,通过回调或父类API),但是此特定函数实现不需要所有参数,如代码中所示: callback = lambda _: True

(很长一段时间这个答案只列出的前三个用例,但第四的情况下想出往往不够,如上所述这里 ,将值得明确列出)

后者的“丢弃变量或参数名称”用例可能与翻译查找用例相冲突,因此有必要避免在也将其用于i18n翻译的任何代码块中都将_用作丢弃变量(许多人更喜欢使用double-正是由于这个原因,下划线__作为他们的一次性变量)。


#5楼

就Python语言而言, _没有特殊含义。 与_foofoo__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 
  • 许多REPLs /炮弹储存最后顶级表达的结果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._但特殊情况_

  • 在国际化和本地化的上下文中, _用作主要翻译功能的别名。

    gettext.gettext(消息)

    根据当前的全局域,语言和语言环境目录,返回消息的本地化翻译。 在本地名称空间中,此函数通常别名为_()(请参见下面的示例)。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值