只有当布尔变量设置为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
,也一样。
我在这里缺少什么?
答案 0 :(得分:609)
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
语句,虽然它的可读性较差,而且没有理由避免这两种语句 - 线变种。
答案 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”)
我没有像线程中的其他人一样使用None
或0
的原因是因为使用None/0
会导致程序print None
或{{ 1}}在print 0
为b
的情况下。
如果您想阅读有关此主题的内容,我在发布说明中添加了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)