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

мне нужно напечатать некоторые вещи только тогда, когда логическая переменная установлена в 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.

что я пропустила?

13 ответов


Python делает не есть трейлинг if сообщении.

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

  1. if о себе:

    if condition: statement
    if condition:
        block
    
  2. 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 заявление на одной строке, хотя это менее читабельно, и на самом деле нет причин избегать двухстрочный вариант.


встроенный if-else выражение всегда должно содержать предложение else, e.g:

a = 1 if b else 0

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

a = 1 if b else a

этот кусок кода оставляет a без изменений, когда b оказывается ложным.


оператор "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)

если вы не хотите, чтобы 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

если ты не aversed к from __future__ import print_function или используют python 3 или более поздней версии:

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

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

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

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

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

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

содержание = ((doc + '\n') if doc else ")

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

if logging: print data

Так как 2.5 вы можете использовать эквивалент C "?:" тернарный условный оператор и синтаксис:

[on_true] if [expression] else [on_false]

Так что ваш пример-это хорошо, но вы должны просто добавить else, например:

print a if b else ''

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

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.

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

a=100
b=True

if b:
   print a

для вашего случая это работает:

a = b or 0

Edit: как это работает?

на вопрос

b = True

такую оценку

b or 0

результаты

True

, который назначен a.

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


вы просто слишком усложняете.

if b:
   print a

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

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

или

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

или

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

вам всегда нужно else в inline if:

a = 1 if b else 0

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


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

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

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

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

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

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