Para uno de mis sitios, necesito verificar si varios atributos de clase están definidos y no están vacíos. Hasta ahora, he utilizado felizmente if self.attr:
, que en mi opinión es la abreviatura de if self.attr is not None and self.attr is not '':
, o cualquiera que sea el valor indefinido del atributo.Cadenas y el operador y: mejores prácticas, diferencias con +
Esto funciona bien, pero cede a un comportamiento sorprendente al verificar múltiples atributos de cadena. '' and ''
no es False
(como esperaba), pero ''
.
Esto plantea la pregunta: ¿existen otros tipos para los cuales el operador and
no fuerza un encasillado a bool
? No puedo encontrar un ejemplo en el que esta diferencia de comportamiento cause un resultado diferente para la if
-clause (después de todo, ''
todavía se evalúa como False
), pero me queda la impresión de que hay casos extremos que podrían ser una trampa.
Por último, me gustaría saber si alguien sabe por qué se implementó de esa manera? Pensé que el Zen de Python fomenta un camino y un solo camino, y el operador +
ya parece ser el camino intuitivo para la concatenación de cadenas.
¿podría poner el código aquí? –
Las respuestas no parecen cubrir esto, centrándose en la parte booleana de la pregunta, pero 'y' nunca concatena la cadena; no es como '+' en absoluto. – geoffspear
[Utilice ''' .join' para concatenar cadenas, no' + '.] (Http://stackoverflow.com/questions/1349311/python-string-join-is-faster-than-but-whats-wrong- aquí/1350289 # 1350289) – unutbu