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?