对于虚拟变量,__(两个下划线)是否优于_(单个下划线)?

时间:2014-07-27 18:44:46

标签: python naming-conventions

我在Python 2.7中有一个任意的例子,我需要一个虚拟变量。我发现很多消息来源建议使用单个_,例如下面的例子:

 directory = {key: [0 for _ in range(catnum)] for key in register}

我找到了这个链接:http://docs.python-guide.org/en/latest/writing/style/#create-an-ignored-variable

以下是来自上述网址的引用段落:

  

注意:   许多Python样式指南建议使用单个下划线_用于一次性变量,而不是这里推荐的双下划线__。问题是_通常用作gettext()函数的别名,并且还在交互式提示符处用于保存上一个操作的值。使用双下划线同样清晰且几乎同样方便,并且消除了意外干扰这些其他用例的风险。

我刚开始用Python编码,并想知道__是否是公认的约定?什么是_导致问题的代码示例?

directory = {key: [0 for __ in range(catnum)] for key in blasts}

2 个答案:

答案 0 :(得分:2)

嗯,引用的段落告诉你使用_的确切问题:在交互式解释器中,以及使用它作为gettext.gettext的别名的任何代码中,在希望将其文本本地化的应用程序中很常见。这是gettext.gettext的文档(强调我的):

  

根据当前信息返回消息的本地化翻译   全局域,语言和区域设置目录。 此功能是   通常在本地名称空间中别名为_()。

大多数程序都使用gettext.gettext,如下所示:

import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')

因此,除非您想要一个可翻译的字符串,否则您实际上不必输入gettext

现在,所有这一切,我看到for _ in range(catnum)远远超过我for __ in range(catnum)。我想你知道使用_是否会导致问题;要么您知道自己在翻译中的工作,要么知道您的应用程序使用_作为gettext.gettext别名。但是,使用__肯定更安全。

如果我猜到它为什么没有被抓住,我会说人们可能会被__推迟,因为双下划线与Python的名字相关联#&# 34;私人"变量,社区通常不赞成这些变量。不过只是一个猜测。

答案 1 :(得分:1)

据我所知,今天的大多数Python程序仍然使用_作为虚拟变量,而不是双下划线__

但是,以下是您问题中引用部分中描述的可能混淆点的示例:

>>> 1+1
2
>>> _
2
>>>