Как написать 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
Ответ 5
Начиная с версии 2.5 вы можете использовать эквивалент Cs "?:" тернарный условный оператор и синтаксис:
[on_true] if [expression] else [on_false]
Итак, ваш пример в порядке, но вам нужно просто добавить else
, например:
print a if b else ''
Ответ 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])