Hri*_*shi 5 python naming-conventions
根据官方python教程,
在交互模式下,最后打印的表达式被分配给变量 _。这意味着当你使用 Python 作为桌面计算器时,继续计算会更容易一些,例如:
>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06
Run Code Online (Sandbox Code Playgroud)
用户应将此变量视为只读。不要显式地给它赋值——你会创建一个同名的独立局部变量,用它的魔法行为屏蔽内置变量。
这里没有混淆。
然后我看到一些人使用_作为循环变量。例如,根据这篇博文:
_ 用作一次性名称。这将允许下一个阅读您的代码的人知道,按照惯例,分配了某个名称但不打算使用。例如,您可能对循环计数器的实际值不感兴趣:
n = 42
for _ in range(n):
do_something()
Run Code Online (Sandbox Code Playgroud)
这是一个好的约定吗?我在解释器中验证了使用_in 循环之后会屏蔽内置变量。但是当它在脚本中使用时(即不是在交互模式下)可以将它用作循环变量吗?
作为 Python 中长期存在的约定,_开发人员仅使用它来满足语法要求。在许多编程语言中,单字符变量通常与废弃名称相关联。
当明确表明存储在该变量中的返回值不重要时,这种用法是可以接受的。
正如您所注意到的,Python 解释器中的含义与典型的现代计算器设置中的含义_类似。Ans当您用作_变量名称时,该功能就会黯然失色。尽管如此,它是可逆的,并且在交互模式下执行代码后:
Run Code Online (Sandbox Code Playgroud)n = 42 for _ in range(n): do_something()
您可以使用以下命令从全局名称池中丢弃此变量(只要它没有在其他地方引用)del:
del _
Run Code Online (Sandbox Code Playgroud)
的值_将再次反映最后的返回值。
还有其他公认的_名称使用方式,主要体现在国际化和本地化方面。
该名称用作模块_中两个最常用函数和的别名。这种用法因 Django 框架而变得流行,该框架在其内部包中利用该库。例如,当需要翻译字符串时,根据此约定,将按以下方式引用它:gettextgettext.gettextgettext.gettext_lazyutils'abc'
from django.utils.translation import gettext as _
# ...
_('abc') # this string would be translated
Run Code Online (Sandbox Code Playgroud)
由于这个原因,某些 Python 人物,例如 Kenneth Reitz,提倡使用__(双下划线)而不是_(单下划线)作为一次性变量,但对社区其他人没有太大吸引力。