2012-01-05 14 views
17

¿Se considera malo el estilo para asignar valores a variables como esta?Asignación con "o" en python

x = "foobar" or None 
y = some_variable or None 

En el ejemplo anterior, x obtiene el valor 'foobar'.

+0

No veo ninguna función llamada prueba de verdad. ¿Dónde están los efectos secundarios? – jcollado

+3

Eso no es lo que es un "efecto secundario". –

+0

@jcollado: No estoy asignando un booleano a x y y. El valor que se asigna es el primer elemento en cortocircuito que es verdadero. El primer caso es "foobar", y el último depende del valor booleano de some_variable. – TheOne

Respuesta

13

No, es una práctica común. Solo se considera un mal estilo para las expresiones que son considerablemente más largas que las tuyas.

+1

Se lo considera un antipatrón en JavaScript. No se lee de forma natural para no iniciados y no se pueden asignar valores falsy. – diginoise

3

También me siento un poco incómodo usando ese tipo de expresiones. En Learning Python 4ed se denomina "comportamiento algo inusual". Más tarde Marcos Lutz dice:

... que resulta ser un paradigma de codificación bastante común en Python: a seleccionar un objeto no vacío de entre un conjunto de tamaño fijo, simplemente cadena juntos en una o expresión. En la forma más simple, esto también es comúnmente utilizado para designar un defecto ...

De hecho, se producen breves expresiones de una sola línea que ayudan a eliminar el ruido de la línea del código.
Este comportamiento es la base para una forma del if/else operador ternario:

A = Y if X else Z 
+0

Pero puede causar que se repitan parámetros largos donde 'Y = X'. Por ejemplo: 'A = my_main_dictionary.my_sub_dictionary.my_value if my_main_dictionary.my_sub_dictionary.my_value else None' or' A = my_main_dictionary.my_sub_dictionary.my_value or None' –

9

El principal peligro de hacer algo como esto es la posibilidad de que (en el segundo caso) some_variable es falsa, pero no Ninguno (el número entero 0, por ejemplo) y no desea terminar con y igual a Ninguno en ese caso.

Cuestiones relacionadas