Subrayado _ como nombre de variable en Python

Peter Norvig tiene un ensayo que describe un progtwig para resolver acertijos de sudoku , incluso los más difíciles, combinando operaciones lógicas deterministas y un recorrido inteligente de las posibles soluciones. Lo último se hace recursivamente; Aquí está esa función ( fuente ):

def search(values): "Using depth-first search and propagation, try all possible values." if values is False: return False ## Failed earlier if all( len( values[s]) == 1 for s in squares): return values ## Solved! ## Chose the unfilled square s with the fewest possibilities _,s = min( (len( values[s]), s) for s in squares if len(values[s]) > 1 ) return some( search( assign( values.copy(), s, d)) for d in values[s] ) 

(He agregado algunos espacios, CR y tabs por el bien de mis ojos; disculpas al Dr. Norvig).

Justo debajo del comentario hay una línea que comienza con ” _,s “. Esa parece ser la tupla sin len(values[s]),s ( len(values[s]),s ) con el valor mínimo de s . ¿Está el Dr. Norvig utilizando ” _ ” como nombre de variable solo para indicar que es un resultado de “no importa”, o está pasando algo más? ¿Hay ocasiones en que se recomienda ” _ ” como nombre de variable? En el modo interactivo, ” _ ” contiene la respuesta de la operación anterior; ¿Existe una función similar en el código no interactivo?

Actualizar

Gracias por las buenas respuestas. Supongo que la respuesta va a Alex Martelli para “valor agregado”; señala que el idioma “_, vbl_of_interest” es a menudo un efecto secundario del idioma DSU, que a su vez se ha hecho en gran medida innecesario.

Sí, _ es un nombre tradicional para “no importa” (que desafortunadamente choca con su uso en I18N, pero ese es un problema aparte ;-). Por cierto, en Python de hoy, en lugar de:

 _,s = min( (len( values[s]), s) for s in squares if len(values[s]) > 1 ) 

podrías codificar

 s = min((s for s in squares if len(values[s])>1), key=lambda s: len(values[s])) 

(No estoy seguro de para qué lanzamiento de Python Peter estaba escribiendo, pero el idioma que está usando es un ejemplo de “decorate-sort-sortecorate” [[DSU]] excepto con min en lugar de sort, y en Python de hoy la key= parámetro opcional es En general, la mejor manera de hacer DSU ;-).

Su interpretación es correcta. Fuera del significado especial en modo interactivo, _ solo se usa como un nombre de variable “no importa”, especialmente en el desempaquetado.

Estás en lo correcto. En modo no interactivo _ no tiene un significado especial. De hecho, Norvig solo quiere transmitir que no le importa el valor de esa variable.

Offtopic: Ese artículo de Norvig es muy bonito. Una lectura recomendada.