2012-01-30 73 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返回命令在其第一個返回值中寫入標準輸出的內容,以及在第二個返回值中寫入標準錯誤的內容。誰編碼顯然不關心命令報告的錯誤。

您提到的輸出串聯必須發生在別處。

相關問題