如何写内联if语句来打印?
只有当布尔variables设置为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
语句 。
Python中有两种:
-
if
声明:if condition: statement if condition: block
-
if
expression式 (在Python 2.5中引入)expression_if_true if condition else expression_if_false
并注意, print a
和b = a
都是语句。 只有一部分是expression。 所以,如果你写
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
条款,它会打印/分配else
? 打印/分配仍然在那里 。
注意,如果你不希望它在那里,你总是可以在一行中写出常规的if
语句,虽然它的可读性较差,并且真的没有理由避免两行的变体。
内联if-else expression式必须总是包含else子句,例如:
a = 1 if b else 0
如果你想让你的'a'variables的值保持不变 – 分配旧的'a'值(否则语法要求仍然需要):
a = 1 if b else a
当b变成False时,这段代码保持不变。
'else'语句是强制性的。 你可以做这样的事情:
>>> b = True >>> a = 1 if b else None >>> a 1 >>> b = False >>> a = 1 if b else None >>> a >>>
编辑:
或者,根据您的需要,您可以尝试:
>>> 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
如果你不是from __future__ import print_function
或使用python 3或更高版本:
from __future__ import print_function a = False b = 100 print(b if a else "", end = "")
添加else是为了使你的代码在语法上正确而需要做的唯一的改变,你需要其他的条件expression式(“if in else block”)
我之所以没有在线程中使用None
或0
,是因为在b
为False
的情况下,使用None/0
将导致程序print None
或print 0
。
如果你想阅读关于这个主题的内容,我已经包含了一个到这个function被添加到Python的补丁的发行说明的链接 。
上面的“模式”与PEP 308中显示的模式非常相似:
这个语法可能看起来很奇怪,倒退。 为什么这个条件是在expression中间,而不是在C的前面c? x:y? 通过将新语法应用于标准库中的模块并查看结果代码的读取来检查决定。 在很多使用条件expression式的情况下,一个值似乎是“常见”,一个值是一个“例外”,只有在条件不成立的情况下才会用到。 条件语法使得这个模式更加明显:
contents =((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 ''
尝试这个 。 它可能会帮助你
a=100 b=True if b: print a
为你的情况这个作品:
a = b or 0
编辑:这是如何工作的?
在这个问题上
b = True
所以评估
b or 0
结果是
True
这是分配给a
。
如果b == False?
, b or 0
将评估为将被分配给a
的第二个操作数0
。
您可以使用:
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.
你简直太复杂了。
if b: print a
如果出现以下情况,您总是需要else
内联:
a = 1 if b else 0
但是更简单的方法是a = int(b)
。
那么你为什么不直接写:
if b: print a else: print 'b is false'
这可以通过string格式来完成。 它使用%符号以及.format()和f-string (新到3.6)
print '%s' % (a if b else "")
要么
print '{}'.format(a if b else "")
要么
print(f'{a if b else ""}')