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?