other = s or "some default value"
Vale, debe aclararse cómo funciona el operador or
. Es un operador booleano, por lo que funciona en un contexto booleano. Si los valores no son booleanos, se convierten en booleanos para los fines del operador.
Tenga en cuenta que el operador or
no devuelve solo True
o False
. En cambio, devuelve el primer operando si el primer operando se evalúa como verdadero, y devuelve el segundo operando si el primer operando se evalúa como falso.
En este caso, la expresión x or y
devuelve x
si es True
o se evalúa como verdadero cuando se convierte a booleano. De lo contrario, devuelve y
. Para la mayoría de los casos, esto servirá para el mismo fin del operador nulo coalescencia de C♯, pero tenga en cuenta:
42 or "something" # returns 42
0 or "something" # returns "something"
None or "something" # returns "something"
False or "something" # returns "something"
"" or "something" # returns "something"
Si utiliza la variable de s
para sostener algo que es o bien una referencia a la instancia de una clase o None
(siempre que su clase no defina los miembros __nonzero__()
y __len__()
), es seguro usar la misma semántica que el operador de nulo coalescencia.
De hecho, incluso puede ser útil tener este efecto secundario de Python. Como sabe qué valores se evalúan como falsos, puede usar esto para activar el valor predeterminado sin usar None
específicamente (un objeto de error, por ejemplo).
En algunos idiomas, este comportamiento se conoce como Elvis operator.
El operador '??' se propone como [PEP 505] (https://www.python.org/dev/peps/pep-0505/). –