Как написать inline if выражение для печати?

Мне нужно напечатать некоторые вещи только тогда, когда для переменной типа boolean задано значение True. Итак, посмотрев , я попытался с простым примером:

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

То же самое, если я пишу print a if b==True.

Что мне здесь не хватает?

Ответ 1

У Python не есть завершающий if оператор.

В Python существует два типа if:

  • if:

    if condition: statement
    if condition:
        block
    
  • if выражение (введено в Python 2.5)

    expression_if_true if condition else expression_if_false
    

И обратите внимание, что оба print a и b = a являются операторами. Только часть a является выражением. Поэтому, если вы пишете

print a if b else 0

это означает

print (a if b else 0)

и аналогично, когда вы пишете

x = a if b else 0

это означает

x = (a if b else 0)

Теперь, что бы напечатать/назначить, если не было предложения else? Печать/назначение еще.

И обратите внимание, что если вы не хотите, чтобы он был там, вы всегда можете написать обычный оператор if в одной строке, хотя он менее читабельный, и на самом деле нет причин избегать двухстрочного варианта.

Ответ 2

Inline if-else EXPRESSION всегда должно содержать предложение else, например:

a = 1 if b else 0

Если вы хотите оставить неизменное значение переменной 'a' - значение old 'a' (еще требуется по требованию синтаксиса):

a = 1 if b else a

Этот кусок кода оставляет a неизменным, когда b поворачивается на False.

Ответ 3

Заявление 'else' является обязательным. Вы можете сделать следующее:

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

EDIT:

Или, в зависимости от ваших потребностей, вы можете попробовать:

>>> if b: print(a)

Ответ 4

Если вы не хотите from __future__ import print_function, вы можете сделать следующее:

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

Какие принты:

100 see no new line

Если вы не откликнулись на from __future__ import print_function или используете python 3 или новее:

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

Добавление else - это единственное изменение, которое вам нужно сделать, чтобы сделать ваш код синтаксически правильным, вам нужно else для условного выражения ( "in line if else blocks" )

Причина, по которой я не использовал None или 0, как и другие в потоке, потому что использование None/0 приведет к тому, что программа будет print None или print 0 в тех случаях, когда b False.

Если вы хотите прочитать эту тему, я включил ссылку в примечания к выпуску для патча, что эта функция была добавлена ​​в Python.

"Шаблон" выше очень похож на шаблон, показанный в PEP 308:

Этот синтаксис может показаться странным и обратным; почему это условие в середине выражения, а не спереди, как в C c? Икс: y? Решение было проверено путем применения нового синтаксиса к модули в стандартной библиотеке и видя, как полученный код читать. Во многих случаях, когда используется условное выражение, одно значение похоже, является "общим случаем", а одно значение - "исключительным случаем", используется только в редких случаях, когда условие не выполняется. условный синтаксис делает этот шаблон более очевидным:

contents = ((doc + '\n'), если doc else '')

Итак, я думаю, что в целом это разумный способ его подбора, но вы не можете спорить с простотой:

if logging: print data

Ответ 6

Вы можете использовать:

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

Точно так же вы можете продолжать:

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

Пример реального мира:

>>> 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.

Ответ 7

Это можно сделать с помощью форматирования строки. Он работает с нотацией%, а также с .format() и f-strings (новинка для 3.6)

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

или

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

или

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

Ответ 8

Попробуйте это. Это может помочь вам

a=100
b=True

if b:
   print a

Ответ 9

В вашем случае это работает:

a = b or 0

Изменить: Как это работает?

В вопросе

b = True

Итак, оценивая

b or 0

приводит к

True

которому присваивается a.

Если b == False?, b or 0 будет оценивать второй операнд 0, который будет назначен a.

Ответ 10

Вы просто чрезмерны.

if b:
   print a

Ответ 11

Вам всегда нужно else в строке, если:

a = 1 if b else 0

Но более простой способ сделать это будет a = int(b).

Ответ 12

Хорошо, почему бы вам просто не написать:

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

Ответ 13

хм, вы можете сделать это с пониманием списка. Это имело бы смысл только в том случае, если бы у вас был реальный диапазон.. но он действительно выполняет свою работу:

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

или используя только эти две переменные:

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