2012-01-30 29 views
6

estoy aprendiendo Python y estoy leyendo a través de un script de ejemplo que incluye algunas definiciones de las variables que se parecen:¿Qué significa var, _ = something en Python? Concatenación de cadenas

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() 

Si el resultado de impresión consigo la salida de la cáscara resultante extienden juntas, así que sé que es la concatenación de las variables. Pero no puedo encontrar ninguna referencia a la convención, en ninguno de los documentos. ¿Alguien me puede explicar eso para estar seguro de que lo estoy usando correctamente?

+0

"definiciones de variables"? No existe tal cosa. Solo son declaraciones de asignación. –

+1

Una forma más clara de escribir la instrucción, suponiendo que '_' no se usó, sería' output = call_command ('pwd') [0] ' – gahooa

Respuesta

13

La forma general

a, b = x, y 

es la asignación tupla. Las partes correspondientes se asignan, por lo que la anterior es equivalente a:

a = x 
b = y 

En su caso call_command(), devuelve una tupla de dos elementos (que es lo process.communicate() devoluciones). Está asignando el primero a output y el segundo a _ (que en realidad es un nombre de variable, que normalmente se usa para nombrar algo cuando no le importa el valor).

+3

Tenga en cuenta que el nombre de la variable _ se usa generalmente como un nombre" ficticio "para indicar variables no utilizadas. – GaretJax

+0

También tiene otro significado en las sesiones de intérprete: * último valor evaluado * – Droogans

4

Hay dos convenciones aquí:

  • resultados Desempaquetar en una tupla de dos elementos (,)
  • que no se preocupan por el segundo elemento de la tupla a fin de utilizar _ como el nombre de ese variable.

En este caso particular, los rendimientos process.communicate(stdout, stderr), pero el código que llama call_command no está interesado en stderr por lo que utiliza esta notación para obtener stdout directamente. Esto sería más o menos equivalente a:

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

_ es un nombre de variable válido en Python que se usa normalmente cuando no tiene la intención de utilizar un resultado para nada. Así que está desempaquetando los resultados de los comandos git en dos variables llamadas output y _, pero no usará el segundo (supongo que es el estado de salida o tal vez la salida de error estándar).

0

No, no es concatenación de cadenas. El _ en sí mismo no significa nada en Python.

En Python, una función puede devolver más de un valor, y puede asignar más de una variable en una declaración. La combinación de estas dos características le permite escribir código como:

def foo(): 
    return 1, 2, 3 

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

Hay una convención común en lenguajes que soportan trabajar con múltiples valores como este que nombrar uno _ significa "Realmente no me importa lo que termina en este variable." En su ejemplo, la función call_command devuelve lo que el comando escribe en la salida estándar en su primer valor de retorno y lo que está escrito en el error estándar en el segundo. Quien codificó eso aparentemente no se preocupó por los errores informados por los comandos.

La concatenación de salida que mencione debe ocurrir en cualquier otro lugar.

Cuestiones relacionadas