¿Cómo escribir una declaración if en línea para imprimir?
Necesito imprimir algunas cosas sólo cuando una variable booleana está configurada en True
. Entonces, después de ver esto , 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?
Python no tiene una if
declaración final .
Hay dos tipos de if
en Python:
if
declaración:if condition: statement if condition: block
if
expresión (introducida en Python 2.5)expression_if_true if condition else expression_if_false
Y tenga en cuenta que ambos print a
y b = a
son declaraciones. Sólo la a
parte es una expresión. Entonces si escribes
print a if b else 0
significa
print (a if b else 0)
y lo mismo cuando escribes
x = a if b else 0
significa
x = (a if b else 0)
Ahora bien, ¿qué imprimiría/asignaría si no hubiera else
cláusula? La impresión/tarea todavía está allí .
Y tenga en cuenta que si no desea que esté allí, siempre puede escribir la if
declaración normal en una sola línea, aunque es menos legible y realmente no hay razón para evitar la variante de dos líneas.
La EXPRESIÓN if-else en línea siempre debe contener la cláusula else, por ejemplo:
a = 1 if b else 0
Si desea dejar el valor de la variable 'a' sin cambios, asignando el antiguo valor 'a' (de lo contrario, las demandas de sintaxis aún lo requieren):
a = 1 if b else a
Este fragmento de código deja a sin cambios cuando b resulta ser Falso.
La declaración "otra cosa" 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 tus necesidades, puedes intentar:
>>> if b: print(a)
Si no quieres from __future__ import print_function
puedes 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 tienes aversión 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 necesitas hacer para que tu código sea sintácticamente correcto, necesitas el else para la expresión condicional (los bloques "en línea si else")
La razón por la que no usé None
o 0
como otros en el hilo lo han usado, es porque usarlo None/0
causaría que el programa print None
o print 0
en los casos en los que b
lo sea False
.
Si desea leer sobre este tema, he incluido un enlace a las notas de la versión del parche en el que se agregó esta característica 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 el medio de la expresión y no al frente como en C's c? x: y? La decisión se verificó aplicando la nueva sintaxis a los módulos de la biblioteca estándar y viendo cómo se leía el código resultante. En muchos casos en los que se utiliza una expresión condicional, un valor parece ser el "caso común" y otro valor es un "caso excepcional", que se utiliza sólo en ocasiones más raras cuando no se cumple la condición. La sintaxis condicional hace que este patrón sea un poco más obvio:
contenidos = ((doc + '\n') si doc else '')
Así que creo que, en general, esta es una forma razonable de abordarlo, pero no se puede discutir la simplicidad de:
if logging: print data