Operador Ternario Python Sin otra cosa

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

if : myList.append('myString') 

He probado el operador ternario:

 myList.append('myString' if ) 

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

Sí, usted puede hacer esto:

  and myList.append('myString') 

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

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

 if : myList.append('myString') 

Demostración:

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

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

 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 statement 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.

 if : 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?

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

  • if : myList.append('myString') – parece ser la forma menos ‘hacky’ (y por lo tanto preferida)
  • and myList.append('myString')
  • myList.append('myString') if else None

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

Puedes hacer algo como esto:

 myList.append('myString') if  else False 

o

 myList.append('myString') if  else 0