valor ternario ternaria operador asignacion python ternary

ternaria - Operador Ternario Python Sin otra cosa



return operador ternario (6)

Básicamente, está pidiendo do_thing() if <condition> else pass construct (que lanzará SyntaxError , si se ejecuta). Como descubrí durante la investigación para (algo) una pregunta similar do_thing() if condition else None es lo más cerca que se puede obtener (que es solo otra forma de hacer <condition> and do_thing() ). Entonces, para resumir esta idea y otras respuestas, aquí están sus opciones:

  • if <condition>: myList.append(''myString'') - parece ser la forma menos ''hacky'' (y por lo tanto preferida)
  • <condition> and myList.append(''myString'')
  • myList.append(''myString'') if <condition> else None

¿Es posible hacer esto en una línea en Python?

if <condition>: myList.append(''myString'')

He probado el operador ternario:

myList.append(''myString'' if <condition>)

pero a mi IDE ( MyEclipse ) no le gustó, sin otra else .


La razón por la que el lenguaje no le permite usar la sintaxis

variable = "something" if a_condition

sin else es que, en el caso de que a_condition == False , la variable sea ​​repentinamente desconocida. Tal vez podría tener como valor predeterminado None , pero Python requiere que todas las asignaciones de variables resulten en asignaciones explícitas. Esto también se aplica a casos como su llamada de función, ya que el valor que se pasa a la función se evalúa tal como lo sería el RHS de una declaración de asignación.

De manera similar, todas las return s realmente deben devolver, incluso si son return condicionales s. P.ej:

return variable if a_condition

no está permitido, pero

return variable if a_condition else None

está permitido, ya que el segundo ejemplo está garantizado para devolver explícitamente algo.


Puedes hacer algo como esto:

myList.append(''myString'') if <condition> else False

o

myList.append(''myString'') if <condition> else 0


Sí, usted puede hacer esto:

<condition> and myList.append(''myString'')

Si <condition> es falsa, entonces el cortocircuito se activará y el lado derecho no se evaluará. Si <condition> es verdadero, entonces se evaluará el lado derecho y se agregará el elemento.

Solo señalaré que hacer lo anterior es bastante no-pitónico, y probablemente sería mejor escribir esto, sin importar:

if <condition>: myList.append(''myString'')

Demostración:

>>> myList = [] >>> False and myList.append(''myString'') False >>> myList [] >>> True and myList.append(''myString'') >>> myList [''myString'']


myList.extend([''myString''] if condition else []) también funcionaría, aunque es más trabajo que las otras soluciones.


if <condition>: myList.append(''myString'')

De otra manera no. ¿Por qué la necesidad de ponerlo en una línea?

Tenga en cuenta que el "operador ternario" es un operador . Como cualquier operador, debe devolver algo , entonces, ¿cómo puede tener un operador ternario sin la cláusula else ? ¿Qué se supone que debe devolver si la condición no es verdadera?