• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

499
Vistas
¿Python tiene el operador Elvis?

El operador ternario en muchos idiomas funciona así:

 x = f() ? f() : g()

Donde si f() es veraz, entonces a x se le asigna el valor de f() , de lo contrario, se le asigna el valor de g() . Sin embargo, algunos idiomas tienen un operador elvis más sucinto que es funcionalmente equivalente:

 x = f() ?: g()

En Python, el operador ternario se expresa así:

 x = f() if f() else g()

¿Pero Python tiene el operador Elvis más sucinto?

Tal vez algo como:

 x = f() else g() # Not actually valid python
about 3 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Sí

Python tiene el operador elvis. Es el condicional or operador:

 x = f() or g()

f() es evaluado. Si es cierto, entonces a x se le asigna el valor de f() , de lo contrario, a x se le asigna el valor de g() .

Referencia: https://en.wikipedia.org/wiki/Elvis_operator#Analogous_use_of_the_short-circuiting_OR_operator

about 3 years ago · Santiago Trujillo Denunciar

0

NB Python no tiene el operador de fusión nula definido por:

 a if a is not None else b

El operador or en a or b comprueba la veracidad de a que es False cuando a==0 o len(a)==0 u otras situaciones similares. Vea lo que es verdadero y falso

Hay una propuesta para agregar tales operadores PEP 505

about 3 years ago · Santiago Trujillo Denunciar

0

La respuesta de Robᵩ sobre el uso de or es una buena sugerencia. Sin embargo, como comentario a la pregunta original,

 x = f() ? f() : g()

es funcionalmente equivalente a

 x = f() ?: g()

solo si f() no tiene efectos secundarios.

Si, por ejemplo, f() lee desde un flujo o generador, llamarlo dos veces tendrá resultados diferentes que llamarlo una vez. Reescribiendo ligeramente a la sintaxis de Python, la siguiente muestra

 values = (x for x in (1, 2, 3)) def f(): return next(values) def g(): return 42 x = f() if f() else g() print(x)

imprimirá 2, mientras que x = f() or g() imprimirá 1.

Sería mejor formular la pregunta como

 tmp = f() x = tmp ? tmp : g()

o, en Python,

 tmp = f() x = tmp if tmp else g()

o en Python 3.8 y versiones posteriores,

 x = tmp if (tmp := f()) else g()

Los dos últimos ejemplos son equivalentes a

 x = f() or g()

independientemente de los efectos secundarios que pueda tener f() .

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda