2012-01-30 19 views
6

私は、Pythonを勉強し、次のようになり、いくつかの変数定義を含む例示スクリプトを読んでいます:Pythonではvar、_ = somethingの意味は何ですか?文字列の連結?

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

"変数の定義" を参照してください?そのようなことはない。彼らは単なる代入文です。 –

+1

'_'が使用されていなかったとすると、より明快な文章が出力されます。' output = call_command( 'pwd')[0] ' – gahooa

答えて

13

一般的な形態

a, b = x, y 

タプル割り当てあります。対応する部分が割り当てられているので、上記と等価である:あなたのケースで

a = x 
b = y 

call_command()(何process.communicate()リターンである)二つの要素のタプルを返します。最初の値をoutputに、第2の値を_に割り当てようとしています(これは実際には変数名で、値を気にしなくても何かを指定するのに使われます)。

+3

_変数名は、通常、"ダミー "未使用の変数。 – GaretJax

+0

インタプリタセッションには別の意味もあります:*最後に評価された値* – Droogans

4

2つの規則がここにあります:二つの要素(,)のタプルに

  • 開梱結果
  • 私はそのための名前として_使用タプルの2番目の要素を気にしません変数。この特定のケースで

process.communicate戻り(stdout, stderr)が、call_commandを呼び出すコードは、stderrに興味がないので、直接stdoutを得るために、この表記法を使用します。これは多かれ少なかれ相当するであろう:

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

_は、Pythonで有効な変数名です。通常、結果を何かのために使用するつもりがない場合に使用されます。だからgitコマンドの結果をoutput_という2つの変数に解凍していますが、2番目の変数は使用しません(終了ステータスか多分標準エラー出力と仮定します)。

0

いいえ、文字列連結ではありません。 _自体は、Pythonでは何も意味しません。

Pythonでは、関数は複数の値を返すことができ、1つのステートメント内の複数の変数に割り当てることができます。 1 _を命名すると、私は本当にこの中に終わるかについて気にしない」を意味していること、このような複数の値を扱うサポートする言語に共通する慣例があります

def foo(): 
    return 1, 2, 3 

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

:これらの2つの機能を組み合わせることで、次のようなコードを書くことができます変数。"あなたの例では、関数call_commandは、コマンドが最初の戻り値で標準出力に書き出すものと、2番目の標準エラーに書き込まれるものを返します。誰でも、それは明らかにコマンドによって報告されたエラーについて気にしなかったコード化しました。

あなたが言及する出力連結は、別の場所で行われなければなりません。

関連する問題