¿El cortocircuito en las declaraciones de asignación se considera un buen estilo?

Si entiendo correctamente

myvar = a and b or c 

da el mismo resultado que

 if a: if b: myvar = b else: myvar = c else: myvar = c 

Así que supongo que es más elegante.

Me parece recordar haber visto este tipo de statement de asignación de cortocircuito en el código JavaScript. Pero, ¿se considera un buen estilo en Python para usar cortocircuito en las declaraciones de asignación?

Esta es realmente una pregunta de opinión, pero en su mayor parte, la respuesta es no. Va en contra de múltiples guías de estilo, probablemente porque la gente tiende a pensar que significa “si a es cierto, usa el valor de b; de lo contrario, usa el valor de c” en lugar del significado real, que es lo que publicaste.

Probablemente quieras la syntax de expresión condicional new-ish en su lugar:

 myvar = b if a else c 

La mayoría de las veces, entonces desea utilizar una expresión condicional en su lugar:

 myvar = b if a else c 

El cortocircuito es muy Pythonic, sin embargo, tenga en cuenta los escollos donde b es false-y; el uso de cortocircuitos resultará en un resultado diferente en ese caso. La mayoría de las veces, no desea asignar c lugar.

Incluso en ese caso, aún puede obtener el mismo resultado con una condición ajustada:

 myvar = b if a and b else c 

El cortocircuito es ideal para los valores predeterminados:

 foo = somevar or 'bar' 

o para asegurarse de que se cumplen las condiciones previas:

 foo = somevar and function_raises_exception_if_passed_empty_value(somevar)