Necesito imprimir algunas cosas solo cuando una variable booleana está configurada en True
. Entonces, después de ver esto , probé 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
if-statement
inline
Ricky Robinson
fuente
fuente
Respuestas:
Python no tiene una
if
declaración final .Hay dos tipos de
if
en Python:if
declaración:if
expresión (introducida en Python 2.5)Y tenga en cuenta que ambas
print a
yb = a
son declaraciones. Solo laa
parte es una expresión. Entonces si escribessignifica
y de manera similar cuando escribes
significa
Ahora, ¿qué imprimiría / asignaría si no hubiera una
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
if
declaración regular en una sola línea, aunque es menos legible y realmente no hay razón para evitar la variante de dos líneas.fuente
if condition: statement
no funciona en caso de declaraciones multilínea.if
, entonces ¿por qué funciona estoprint [i for i in range(10) if i%2]
? Me gustaría que lo permitan las afueras de comprensiones ...for
entre ellas.Inline if-else EXPRESIÓN siempre debe contener cláusula else, por ejemplo:
Si desea dejar su valor variable 'a' sin cambios, asignando el valor 'a' anterior (de lo contrario, las demandas de sintaxis todavía lo requieren):
Este fragmento de código deja un sin cambios cuando b se convierte en Falso.
fuente
print a if b
else a
sería mejor entonceselse 0
if b: print a
Solo necesito un simple si en ese caso""
oNone
, ver detalles en otras respuestas).La declaración 'else' es obligatoria. Puedes hacer cosas como esta:
EDITAR:
O, según sus necesidades, puede intentar:
fuente
Si no quieres
from __future__ import print_function
puedes hacer lo siguiente:Que imprime:
Si no te molesta
from __future__ import print_function
o estás usando Python 3 o posterior: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 otro bloquea")
La razón por la que no utilicé
None
o me0
gustaron otras personas en el hilo es porque el usoNone/0
causaría que el programa lo hagaprint None
oprint 0
en los casos en que seb
encuentreFalse
.Si desea leer sobre este tema, he incluido un enlace a las notas de la versión del 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:
Así que, en general, esta es una forma razonable de abordarlo, pero no se puede discutir con la simplicidad de:
fuente
print ""
todavía imprimirá algo: una línea en blanco.end
argumentoprint
solo aparece en Python 3.x, ¿verdad?from __future__ import print_function
Desde 2.5 puede usar el equivalente del operador condicional ternario "?:" Y la sintaxis es:
Entonces su ejemplo está bien, pero simplemente tiene que agregar
else
, como:fuente
print ''
todavía imprimirá una nueva línea, lo que se evita en la respuesta de Noelkd.Puedes usar:
De la misma manera puedes seguir así:
Ejemplo del mundo real:
fuente
Esto se puede hacer con el formato de cadena . Funciona con la notación%, así como .format () y f-strings (nuevo en 3.6)
o
o
fuente
print a if b else ""
. Que es exactamente lo que hace la respuesta de Noelkd.print "",
(dos puntos) para Python2 yprint("", end="")
Python3.Para su caso esto funciona:
Editar: ¿Cómo funciona esto?
En la pregunta
Entonces evaluando
resultados en
que se asigna a
a
.Si
b == False?
,b or 0
evaluaría el segundo operando al0
que se asignaríaa
.fuente
Prueba esto . Podría ayudarte
fuente
Simplemente eres demasiado complicado.
fuente
if DEBUG: print something
Siempre necesita un
else
en línea si:Pero sería una forma más fácil de hacerlo
a = int(b)
.fuente
a = int(bool(b))
.Bueno, ¿por qué no simplemente escribes:
fuente
hmmm, puedes hacerlo con una lista de comprensión . Esto solo tendría sentido si tuviera un rango real ... pero hace el trabajo:
o usando solo esas dos variables:
fuente