How to write inline if statement for print?
我只需要在布尔变量设置为
1 2 3 4 5 6 7 | >>> a = 100 >>> b = True >>> print a if b File"<stdin>", line 1 print a if b ^ SyntaxError: invalid syntax |
如果我写
我在这里错过了什么?
Python没有尾随的
Python中有两种
1 2 3 | if condition: statement if condition: block |
1 | expression_if_true if condition else expression_if_false |
请注意,
1 | print a if b else 0 |
它的意思是
1 | print (a if b else 0) |
而且当你写作时也是如此
1 | x = a if b else 0 |
它的意思是
1 | x = (a if b else 0) |
现在,如果没有
请注意,如果您不希望它出现在那里,您总是可以在一行上编写常规
内联if-else EXPRESSION必须始终包含else子句,例如:
1 | a = 1 if b else 0 |
如果你想保持'a'变量值不变 - 确定旧的'a'值(语法要求仍然需要):
1 | a = 1 if b else a |
当b变为False时,这段代码保持不变。
'else'语句是强制性的。你可以做这样的事情:
1 2 3 4 5 6 7 8 | >>> b = True >>> a = 1 if b else None >>> a 1 >>> b = False >>> a = 1 if b else None >>> a >>> |
编辑:
或者,根据您的需要,您可以尝试:
1 | >>> if b: print(a) |
如果您不想
1 2 3 4 | a = 100 b = True print a if b else"", # Note the comma! print"see no new line" |
哪个印刷品:
1 | 100 see no new line |
如果你没有厌恶
1 2 3 4 | from __future__ import print_function a = False b = 100 print(b if a else"", end ="") |
添加else是您需要做的唯一更改,以使您的代码在语法上正确,您需要条件表达式的else("in else if else blocks")
我没有像线程中的其他人那样使用
如果您想阅读有关此主题的信息,我已经添加了一个指向该功能添加到Python的补丁的发行说明的链接。
上面的'模式'与PEP 308中显示的模式非常相似:
This syntax may seem strange and backwards; why does the condition go
in the middle of the expression, and not in the front as in C's c ? x
: y? The decision was checked by applying the new syntax to the
modules in the standard library and seeing how the resulting code
read. In many cases where a conditional expression is used, one value
seems to be the 'common case' and one value is an 'exceptional case',
used only on rarer occasions when the condition isn't met. The
conditional syntax makes this pattern a bit more obvious:contents = ((doc + '
') if doc else '')
所以我认为总的来说这是一种合理的方法来解决它但你无法与简单的方法争论:
1 | if logging: print data |
从2.5开始,您可以使用C的"?:"三元条件运算符,语法为:
1 | [on_true] if [expression] else [on_false] |
所以你的例子很好,但你只需添加
1 | print a if b else '' |
您可以使用:
1 | print (1==2 and"only if condition true" or"in case condition is false") |
同样,你可以继续前进:
1 | print 1==2 and"aa" or ((2==3) and"bb" or"cc") |
现实世界的例子:
1 2 3 4 5 | >>> 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. |
这可以通过字符串格式化来完成。它适用于%表示法以及.format()和f-strings(新到3.6)
1 | print '%s' % (a if b else"") |
要么
1 | print '{}'.format(a if b else"") |
要么
1 | print(f'{a if b else""}') |
试试这个 。它可能对你有帮助
1 2 3 4 5 | a=100 b=True if b: print a |
对于您的情况,这适用:
1 | a = b or 0 |
编辑:这是如何工作的?
在问题中
1 | b = True |
所以评估
1 | b or 0 |
结果是
1 | True |
分配给
如果
你只是过于复杂。
1 2 | if b: print a |
如果出现以下情况,您在内联中始终需要
1 | a = 1 if b else 0 |
但更简单的方法是
好吧,你为什么不写简单:
1 2 3 4 | if b: print a else: print 'b is false' |
嗯,你可以用列表理解来做到这一点。如果你有一个真正的范围,这只会有意义..但它确实做了这个工作:
1 | print([a for i in range(0,1) if b]) |
或仅使用这两个变量:
1 | print([a for a in range(a,a+1) if b]) |