我看到函数返回元组并在接收结束时,有时我看到类似这样的语法。
def foo():
return (True, False)
foo, __ = foo()
我调查的是,__
(双下划线)不会给出pep8
错误,好像它没有在任何地方使用。
答案 0 :(得分:4)
正如AndrésPérez-Albela H.所提到的,双重下划线通常用于“魔术方法”,如__init__()
。在该用法中,他们引导和跟踪方法名称。方法(或变量)名称前面的单个下划线(如_index
)通常表示“这是私有成员变量或私有方法,不应被其他代码使用”。这只是约定,对Python解释器没有任何特殊含义,而一些双下划线方法做具有特殊含义。
现在,至于您提出的问题:__
(双下划线)作为变量名称在Python编码中不常见。更常见的约定是对任何其内容不需要的变量使用_
(单个下划线)。有关详细信息,请参阅What is the purpose of the single underscore "_" variable in Python?。
但是,有时候程序员可能希望避免使用_
作为变量名称。具体来说,如果他在交互式Python解释器会话中运行代码。在交互式会话中,从前一个表达式返回的值存储在名为_
的变量中。因此,如果您习惯使用_
作为“我不关心其内容的变量”,但您处于交互式Python解释器会话中,则可能会切换到使用__
来实现此目的代替。
所以我最好的猜测是,您看到的示例代码旨在在交互式Python会话中运行,其中_
已经具有特殊含义。所以编写代码的人使用__
代替他的一次性变量,而不是更常用的_
。