python if-statement inline

plot title python



¿Cómo escribir en línea si la declaración para imprimir? (13)

Necesito imprimir algunas cosas solo cuando una variable booleana está configurada en True . Entonces, después de ver this , lo intenté con un ejemplo simple:

>>> a = 100 >>> b = True >>> print a if b File "<stdin>", line 1 print a if b ^ SyntaxError: invalid syntax

Lo mismo si escribo print a if b==True .

¿Que me estoy perdiendo aqui?


Bueno, ¿por qué no simplemente escribe:

if b: print a else: print ''b is false''


Desde 2.5 se puede usar el operador condicional ternario equivalente a "?:" De C y la sintaxis es:

[on_true] if [expression] else [on_false]

Entonces tu ejemplo está bien, pero simplemente debes agregar else , como:

print a if b else ''''


Esto se puede hacer con el formato de cadena . Funciona con la notación%, así como .format() y f-strings (nuevo a 3.6)

print ''%s'' % (a if b else "")

o

print ''{}''.format(a if b else "")

o

print(f''{a if b else ""}'')


Inline if-else EXPRESSION siempre debe contener una cláusula else, por ejemplo:

a = 1 if b else 0

Si desea dejar sin cambios el valor de su variable ''a'', debe asumir el antiguo valor ''a'' (de lo contrario, las demandas de sintaxis todavía lo requieren):

a = 1 if b else a

Este fragmento de código no se modifica cuando b se convierte en Falso.


La declaración ''else'' es obligatoria. Puedes hacer cosas como esta:

>>> b = True >>> a = 1 if b else None >>> a 1 >>> b = False >>> a = 1 if b else None >>> a >>>

EDITAR:

O, dependiendo de sus necesidades, puede intentar:

>>> if b: print(a)


Para tu caso esto funciona:

a = b or 0

Edit: ¿Cómo funciona esto?

En la pregunta

b = True

Así que evaluando

b or 0

resultados en

True

que se asigna a a .

Si b == False? , b or 0 evaluaría el segundo operando 0 que se asignaría a a .


Prueba esto . Te podria ayudar

a=100 b=True if b: print a


Puedes usar:

print (1==2 and "only if condition true" or "in case condition is false")

Así como puedes seguir así:

print 1==2 and "aa" or ((2==3) and "bb" or "cc")

Ejemplo del mundo real:

>>> print "%d item%s found." % (count, (count>1 and ''s'' or '''')) 1 item found. >>> count = 2 >>> print "%d item%s found." % (count, (count>1 and ''s'' or '''')) 2 items found.


Python no tiene una sentencia if arrastre.

Hay dos tipos de if en Python:

  1. if declaración:

    if condition: statement if condition: block

  2. if expresión (introducida en Python 2.5)

    expression_if_true if condition else expression_if_false

Y tenga en cuenta que ambas print a y b = a son declaraciones. Sólo la a parte es una expresión. Así que si escribes

print a if b else 0

significa

print (a if b else 0)

y de manera similar cuando escribes

x = a if b else 0

significa

x = (a if b else 0)

Ahora, ¿qué imprimiría / asignaría si no hubiera else cláusula? La impresión / asignación todavía está allí .

Y tenga en cuenta que si no desea que esté allí, siempre puede escribir la instrucción if regular en una sola línea, aunque es menos legible y realmente no hay razón para evitar la variante de dos líneas.


Si no desea from __future__ import print_function , puede hacer lo siguiente:

a = 100 b = True print a if b else "", # Note the comma! print "see no new line"

Que imprime:

100 see no new line

Si no estás en contra from __future__ import print_function o estás usando python 3 o posterior:

from __future__ import print_function a = False b = 100 print(b if a else "", end = "")

Agregar el else es el único cambio que necesita hacer para que su código sea sintácticamente correcto, necesita el else para la expresión condicional (el "en línea si el resto está bloqueado")

La razón por la que no usé None o 0 como han usado otros en el hilo, es porque el uso de None/0 causaría que el programa print None o print 0 en los casos donde b es False .

Si desea leer sobre este tema, he incluido un link a las notas de la versión para el parche que esta característica se agregó a Python.

El ''patrón'' anterior es muy similar al patrón que se muestra en PEP 308:

Esta sintaxis puede parecer extraña y al revés; ¿Por qué la condición va en medio de la expresión, y no en el frente como en la C de C? x: y? La decisión se verificó aplicando la nueva sintaxis a los módulos en la biblioteca estándar y viendo cómo se lee el código resultante. En muchos casos donde se usa una expresión condicional, un valor parece ser el "caso común" y un valor es un "caso excepcional", que se usa solo en raras ocasiones cuando no se cumple la condición. La sintaxis condicional hace que este patrón sea un poco más obvio:

contents = ((doc + ''/ n'') si doc else '''')

Así que, en general, creo que esta es una forma razonable de acercarse, pero no se puede discutir con la simplicidad de:

if logging: print data


Siempre necesitas una else en una línea si:

a = 1 if b else 0

Pero una forma más fácil de hacerlo sería a = int(b) .


Simplemente eres demasiado complicado.

if b: print a


hmmm, puedes hacerlo con una lista de comprensión . Esto solo tendría sentido si tuviera un rango real ... pero hace el trabajo:

print([a for i in range(0,1) if b])

o usando solo esas dos variables:

print([a for a in range(a,a+1) if b])