2012-01-30 71 views
6

我学习Python和我通过一个示例脚本,其中包括一些变量定义看起来像阅读:var,_ =在Python中的含义是什么?字符串连接?

output,_ = call_command('git status') 
output,_ = call_command('pwd') 

def call_command(command): 
    process = subprocess.Popen(command.split(' '), 
     stdout=subprocess.PIPE, 
     stderr=subprocess.PIPE) 
    return process.communicate() 

如果我打印输出我得到所产生的外壳输出串在一起,所以我知道这是串联的变量。但是我无法在任何文档中找到任何对_的约定。有人可以向我解释这一点,以便我确切知道我正确使用它吗?

+0

“变量定义”?哪有这回事。他们只是赋值语句。 – 2012-01-30 20:51:00

+1

假设'_'未被使用,一个更清晰的写入语句的方法是'output = call_command('pwd')[0]' – gahooa 2012-01-30 21:00:18

回答

13

一般形式

a, b = x, y 

元组分配。的相应部分被分配,所以上述的等价于:

a = x 
b = y 

在你的情况,call_command()返回两个元素的元组(这是process.communicate()返回)。你将第一个分配给output,第二个分配给_(这实际上是一个变量名,通常用于在不关心值的情况下命名)。

+3

请注意,_变量名通常用作“虚拟”名称来指示未使用的变量。 – GaretJax 2012-01-30 20:31:19

+0

它在解释器会话中还具有另一个含义:*上次评估值* – Droogans 2012-01-30 22:04:20

4

有两个约定在这里:

  • 拆开结果为两个元素(,
  • 我不在乎元组的第二个元素的元组,以便使用_作为这个名字变量。

在这种特殊情况下,process.communicate回报(stdout, stderr),但调用call_command代码不感兴趣stderr所以它使用这个符号来直接获得stdout。这将是或多或少相当于:

result = call_command(<command>) 
stdout = result[0] 
3

_是Python中的一个有效变量名,通常在您不打算将结果用于任何事物时使用。因此,您将git命令的结果解压缩到名为output_的两个变量中,但不会使用第二个变量(我假设它是退出状态或可能是标准错误输出)。

0

不,它不是字符串连接。 _本身并不代表Python中的任何东西。

在Python中,函数可以返回多个值,并且您可以在一个语句中分配多个变量。结合这两项功能可以让你写的代码,如:

def foo(): 
    return 1, 2, 3 

a, b, c = foo() 
print(a) # prints 1 
print(b) # prints 2 
print(c) # prints 3 

有在支持像这样多个值工作语言的共同约定,命名一个_的意思是“我真的不关心什么在此结束变量。”在你的例子中,函数call_command返回命令在其第一个返回值中写入标准输出的内容,以及在第二个返回值中写入标准错误的内容。谁编码显然不关心命令报告的错误。

您提到的输出串联必须发生在别处。

相关问题