在Python中使用下划线作为循环变量是否可以接受?

根据官方python tutorial

  

在交互模式下,最后打印的表达式被分配给   变量_。这意味着当您将Python用作办公桌时   计算器,继续进行计算比较容易,因为   例如:

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_,2)
113.06
  

此变量应由用户视为只读。别   明确为其分配值-您将创建一个独立的   具有相同名称的局部变量掩盖了内置变量   它的神奇行为。

这里没有混乱。

然后我看到有些人使用_作为循环变量。例如,按照this blog post

  

_用作一次性名称。这将使下一个阅读您的代码的人知道,按照惯例,   已分配但不打算使用。例如,您可能不   对循环计数器的实际值感兴趣:

n = 42
for _ in range(n):
    do_something()

这是个好习惯吗?我在解释器中验证了之后在循环中使用_会掩盖内置变量。但是在脚本中使用它作为循环变量是可以的(即,不在交互模式下)

liyunfei97 回答:在Python中使用下划线作为循环变量是否可以接受?

根据Python中长期存在的约定,_用作开发人员仅用来满足语法要求的名称。在许多编程语言中,单字符变量通常与一次性使用的名称相关联。

当明确表明存储在此变量中的返回值不重要时,这种用法是可以接受的。


在交互模式下

您已经注意到,Python解释器中_的含义类似于典型的现代计算器设置中的Ans。当您将_用作变量名时,该功能将被覆盖。但是,它是可逆的,并且在以交互方式执行代码之后:

n = 42
for _ in range(n):
    do_something()

您可以使用del从全局名称池中删除此变量(只要未在其他位置引用该变量):

del _

_的值将再次反映最后的返回值。


特殊情况

还有其他公认的使用_名称的方法,主要用于国际化和本地化。

名称_用作gettext模块的两个最常用功能gettext.gettextgettext.gettext_lazy的别名。 Django框架在其内部utils包中利用了该库,因此这种用法已变得普及。例如,当字符串'abc'需要翻译时,根据此约定,将以以下方式引用它:

from django.utils.translation import gettext as _
# ...
_('abc')  # this string would be translated

由于这个原因,某些Python人物(例如Kenneth Reitz)将__(双下划线)而不是_(单下划线)用作抛弃型变量,但没有太多吸引力来自其他社区。​​ p>

本文链接:https://www.f2er.com/2988840.html

大家都在问