问题:如何编写内联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
。
我在这里想念什么?
回答 0
Python不不会有拖尾if
声明。
if
Python 有两种:
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
内联if-else EXPRESSION必须始终包含else子句,例如:
a = 1 if b else 0
如果您想保持’a’变量值不变-修改旧的’a’值(语法要求中还需要其他):
a = 1 if b else a
这段代码留下一个不变当b转弯是假的。
回答 2
‘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
如果您不想这样做,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(“如果else阻塞,则行内”)
我没有使用None
或0
与线程中的其他线程一样使用过的None/0
原因是,使用会导致程序进入print None
或print 0
处于b
is 的情况False
。
如果您想阅读有关此主题的内容,我提供了指向该功能已添加到Python的补丁程序的发行说明的链接。
上面的“模式”与PEP 308中显示的模式非常相似:
这种语法可能看起来很奇怪而且倒退。为什么条件出现在表达式的中间,而不是C的c的前面?x:y?通过将新语法应用于标准库中的模块并查看结果代码的读取方式来检查该决定。在许多使用条件表达式的情况下,一个值似乎是“常见情况”,而一个值是“exceptions情况”,仅在不满足条件的极少数情况下使用。条件语法使此模式更为明显:
内容=((doc +’\ n’)如果文档为其他”)
因此,我认为总体而言,这是一种合理的处理方式,但是您不能凭借以下简单性来参数:
if logging: print data
回答 4
从2.5开始,您可以使用C的等价 三元条件运算符,其语法为:
[on_true] if [expression] else [on_false]
所以您的示例很好,但是您只需添加else
,例如:
print a if b else ''
回答 5
您可以使用:
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.
回答 6
这可以通过字符串格式化来完成。它适用于%表示法以及.format()和f字符串(3.6的新功能)
print '%s' % (a if b else "")
要么
print '{}'.format(a if b else "")
要么
print(f'{a if b else ""}')
回答 7
对于您的情况,这可行:
a = b or 0
编辑:这是如何工作的?
在问题中
b = True
所以评估
b or 0
结果是
True
分配给a
。
如果b == False?
,b or 0
将求值到0
将分配给的第二个操作数a
。
回答 8
尝试这个 。可能对你有帮助
a=100
b=True
if b:
print a
回答 9
您只是太复杂了。
if b:
print a
回答 10
在以下情况下,您始终需要else
内联:
a = 1 if b else 0
但是更简单的方法是a = int(b)
。
回答 11
好吧,为什么不简单地写:
if b:
print a
else:
print 'b is false'
回答 12
嗯,您可以通过列表理解来做到这一点。这只有在您拥有真实范围的情况下才有意义..但是它确实可以做到:
print([a for i in range(0,1) if b])
或仅使用这两个变量:
print([a for a in range(a,a+1) if b])