Мне нужно печатать некоторые вещи только тогда, когда логическая переменная установлена в 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
.
Что мне здесь не хватает?
python
if-statement
inline
Рики Робинсон
источник
источник
Ответы:
Python вовсе не имеет косое
if
заявление .В
if
Python есть два вида :if
заявление:if
выражение (введено в Python 2.5)И обратите внимание, что оба
print a
иb = a
являются заявлениями. Толькоa
часть является выражением. Так что если вы напишитеэто значит
и так же, когда вы пишете
это значит
Теперь, что это напечатало бы / назначило, если бы не было
else
пункта? Печать / назначение все еще там .И обратите внимание, что, если вы не хотите, чтобы он был там, вы всегда можете написать регулярное
if
выражение в одну строку, хотя оно менее читабельно и на самом деле нет причин избегать двухстрочного варианта.источник
if condition: statement
это не работает в случае многострочных заявлений.if
, то почему это работает:print [i for i in range(10) if i%2]
? Я бы хотел, чтобы они допустили это за пределами понимания ...for
между ними.Встроенный if-else EXPRESSION всегда должен содержать условие else, например:
Если вы хотите оставить значение переменной «a» без изменений - присваивая старое значение «a» (иначе все еще требуется синтаксические требования):
Этот фрагмент кода оставляет неизменным , когда б превращается в значение False.
источник
print a if b
else a
тогда было бы лучшеelse 0
if b: print a
Просто нужно простое, если в таком случае""
илиNone
, смотрите подробности в других ответах).Оператор 'else' является обязательным. Вы можете сделать что-то вроде этого:
РЕДАКТИРОВАТЬ:
Или, в зависимости от ваших потребностей, вы можете попробовать:
источник
Если вы не хотите,
from __future__ import print_function
вы можете сделать следующее:Какие отпечатки:
Если вы не против
from __future__ import print_function
или используете Python 3 или более поздней версии :Добавление else - это единственное изменение, которое необходимо внести, чтобы сделать ваш код синтаксически правильным, вам нужно else для условного выражения («в строке, если else блокирует»)
Причина, по которой я не использовал
None
или не использовал0
другие в потоке, заключается в том, что использованиеNone/0
приведет к тому, что программа будетprint None
илиprint 0
в тех случаях, когдаb
естьFalse
.Если вы хотите прочитать об этой теме, я включил ссылку на примечания к выпуску патча, который эта функция была добавлена в Python.
Вышеприведенный «шаблон» очень похож на шаблон, показанный в PEP 308:
Так что я думаю, что в целом это разумный подход, но вы не можете спорить с простотой:
источник
print ""
все равно что-то напечатает: пустая строка.end
Argumnt вprint
появляется только в Python 3.x, правильно?from __future__ import print_function
Начиная с версии 2.5, вы можете использовать эквивалент тройного условного оператора C "?:", А синтаксис:
Итак, ваш пример в порядке, но вы должны просто добавить
else
, например:источник
print ''
он по-прежнему будет печатать новую строку, чего в ответе от Noelkd избегать.Ты можешь использовать:
Точно так же вы можете продолжать:
Пример из реального мира:
источник
Это может быть сделано с форматированием строки . Он работает с нотацией%, а также .format () и f-строками (новинка для 3.6)
или
или
источник
print a if b else ""
. Именно это и делает ответ Ноэлькда.print "",
(двоеточие) для Python2 и используяprint("", end="")
для Python3.Для вашего случая это работает:
Редактировать: Как это работает?
В вопросе
Итак, оценивая
результаты в
который назначен
a
.Если
b == False?
,b or 0
будет оценивать второй операнд,0
который будет назначенa
.источник
Попробуй это . Это может помочь вам
источник
Вы просто усложняете.
источник
if DEBUG: print something
Вы всегда нуждаетесь
else
во встроенном, если:Но проще было бы сделать это
a = int(b)
.источник
a = int(bool(b))
.Ну, почему бы тебе просто не написать:
источник
хм, вы можете сделать это с пониманием списка . Это имело бы смысл только в том случае, если бы у вас был реальный диапазон .. но он действительно выполняет свою работу:
или используя только эти две переменные:
источник