Subrayado como nombre de variable en Python [duplicar]
Esta pregunta ya tiene una respuesta aquí:
Peter Norvig tiene un ensayo que describe un programa para resolver rompecabezas sudoku , incluso los más difíciles, combinando operaciones lógicas deterministas y un recorrido inteligente de las posibles soluciones. El esto ú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 añadido algunos espacios, CRs 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 sin empaquetar (len(values[s]),s
) con el valor mínimo de s
. ¿Está el Dr. Norvig usando " _
"como nombre de variable solo para indicar que es un resultado de" no me importa", o está pasando algo más? ¿Hay momentos en los que se recomienda" _
" ¿como nombre de variable? En el modo interactivo, "_
" contiene la respuesta de la operación anterior; ¿hay una función similar en el código no interactivo?
Actualización
Gracias por las buenas respuestas. Supongo que la respuesta va a Alex Martelli para "valor añadido"; señala que el idioma"_, vbl_of_interest " es a menudo un efecto secundario del idioma del ESD, que a su vez se ha hecho en gran medida innecesario.
3 answers
Sí, _
es un nombre tradicional para "don't care" (que desafortunadamente choca con su uso en I18N, pero eso es un tema 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 para qué versión de Python estaba escribiendo Peter, pero el modismo que está usando es un ejemplo de "decorate-sort-undecorate" [[DSU]] excepto con min en lugar de sort, y en Python de hoy el parámetro opcional key=
es generalmente la mejor manera de hacer DSU;-).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-16 00:54:30
Tienes razón. 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-16 00:48:42
Su interpretación es correcta. Fuera del significado especial en el modo interactivo, _
solo se usa como un nombre de variable "no importa", especialmente en el desempaquetado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-16 00:50:53