¿Cómo escribir una declaración if en línea para imprimir?

Resuelto Ricky Robinson asked hace 12 años • 15 respuestas

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?

Ricky Robinson avatar Aug 09 '12 16:08 Ricky Robinson
Aceptado

Python no tiene una if declaración final .

Hay dos tipos de ifen Python:

  1. ifdeclaració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 ambos print ay b = ason declaraciones. Sólo la aparte 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 elsecláusula? La impresión/tarea todavía está allí .

Y tenga en cuenta que si no desea que esté allí, siempre puede escribir la ifdeclaració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.

Jan Hudec avatar Aug 09 '2012 09:08 Jan Hudec

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.

Rostyslav Dzinko avatar Aug 09 '2012 09:08 Rostyslav Dzinko

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)
Alexis Huet avatar Aug 09 '2012 09:08 Alexis Huet

Si no quieres from __future__ import print_functionpuedes 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_functiono 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é Noneo 0como otros en el hilo lo han usado, es porque usarlo None/0causaría que el programa print Noneo print 0en los casos en los que blo 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
Noelkd avatar May 02 '2013 11:05 Noelkd