sentencias - str en python
Subraye_como nombre de variable en Python (3)
Estás en lo correcto. En modo no interactivo _
no tiene ningún 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 bueno. Una lectura recomendada.
Esta pregunta ya tiene una respuesta aquí:
Peter Norvig tiene un ensayo que describe un programa para resolver acertijos de sudoku , incluso los más difíciles, mediante la combinación de operaciones lógicas deterministas y el recorrido inteligente de las posibles soluciones. El último se hace recursivamente; aquí está esa función ( source ):
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 pestañas 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 desempaquetada ( len(values[s]),s
) con el valor mínimo de s
. ¿El Dr. Norvig está usando " _
" como nombre de variable solo para indicar que es un resultado de "no me importa", o está sucediendo algo más? ¿Hay momentos en los que se recomienda " _
" como nombre de variable? En modo interactivo, " _
" contiene la respuesta de la operación anterior; ¿hay una función similar en el código no interactivo?
Actualizar
Gracias por las buenas respuestas. Supongo que La respuesta va para Alex Martelli por "valor agregado"; señala que el modismo "_, vbl_of_interest" es a menudo un efecto secundario de la expresión del DSU, que a su vez se ha vuelto en gran medida innecesaria.
Sí, _
es un nombre tradicional para "no me importa" (que desafortunadamente choca con su uso en I18N, pero eso es un problema aparte ;-). Por cierto, en el 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 qué versión de Python Peter estaba escribiendo, pero el modismo que está usando es un ejemplo de "decorate-sort-undecorate" [[DSU]] excepto con min en lugar de ordenar, y en el Python de hoy el parámetro key=
optional generalmente la mejor manera de hacer DSU ;-).
Tu interpretación es correcta Fuera del significado especial en modo interactivo _
solo se usa como un nombre de variable "no me importa", especialmente al desempaquetar.