如何编写内联if语句用于打印?

时间:2012-08-09 09:31:48

标签: python if-statement inline

只有当布尔变量设置为True时才需要打印一些东西。所以,在查看this之后,我尝试了一个简单的例子:

>>> 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 个答案:

答案 0 :(得分:609)

Python 有一个尾随if 语句

Python中有两种if

  1. if声明:

    if condition: statement
    if condition:
        block
    
  2. if 表达式(在Python 2.5中引入)

    expression_if_true if condition else expression_if_false
    
  3. 请注意,print ab = 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语句,虽然它的可读性较差,而且没有理由避免这两种语句 - 线变种。

答案 1 :(得分:76)

内联if-else EXPRESSION 必须始终包含else子句,例如:

a = 1 if b else 0

如果你想保持你的'a'变量值不变 - 确定旧的'a'值(语法要求仍然需要):

a = 1 if b else a

当b变为False时,这段代码保持 a 不变。

答案 2 :(得分:15)

'else'语句是强制性的。你可以做这样的事情:

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

修改

或者,根据您的需要,您可以尝试:

>>> if b: print(a)

答案 3 :(得分:14)

如果您不想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 else if else blocks”)

我没有像线程中的其他人一样使用None0的原因是因为使用None/0会导致程序print None或{{ 1}}在print 0b的情况下。

如果您想阅读有关此主题的内容,我在发布说明中添加了link,以便将此功能添加到Python中。

上面的'模式'与PEP 308中显示的模式非常相似:

  

这种语法可能看起来很奇怪而且倒退;情况为何如此   在表达式的中间,而不是在C的c中的前面? X   :是吗?通过将新语法应用于该决策来检查   标准库中的模块,并查看生成的代码   读。在许多情况下,使用条件表达式,一个值   似乎是'常见案例',一个价值是'例外案例',   仅在不满足条件的罕见情况下使用。该   条件语法使这种模式更加明显:

     

contents =((doc +'\ n')if doc else'')

所以我认为总的来说这是一种合理的方法,但是你不能用简单的方式来争论:

False

答案 4 :(得分:7)

您可以使用:

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.

答案 5 :(得分:5)

试试这个。它可能对你有帮助

a=100
b=True

if b:
   print a

答案 6 :(得分:5)

可以使用string formatting完成此操作。它适用于%表示法以及.format()f-strings(新到3.6)

END

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

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

答案 7 :(得分:4)

对于你的情况,这是有效的:

a = b or 0

修改:这是如何运作的?

在问题中

b = True

所以评估

b or 0

结果

True

分配给a

如果b == False?b or 0将评估为第0个分配给a的第一个操作数{。}}。

答案 8 :(得分:3)

你只是过度复杂。

if b:
   print a

答案 9 :(得分:2)

如果符合以下条件,您在内联中始终需要else

a = 1 if b else 0

但更简单的方法是a = int(b)

答案 10 :(得分:1)

那你为什么不写下来:

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

答案 11 :(得分:0)

hmmm,您可以通过列表理解来实现。这只有在您拥有真实范围的情况下才有意义。.但是确实可以做到:

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

或仅使用这两个变量:

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

答案 12 :(得分:-1)

您可以像这样编写内联三元运算符:

sure = True

# inline operator
is_true = 'yes' if sure else 'no'

# print the outcome
print(is_true)