¿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'.
¿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'.
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.
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
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
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' –
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.
No veo ninguna función llamada prueba de verdad. ¿Dónde están los efectos secundarios? – jcollado
Eso no es lo que es un "efecto secundario". –
@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