我需要打印一些东西,只有当布尔变量设置为True。所以,在看完这之后,我尝试了一个简单的例子:
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。
print a if b==True
我错过了什么?
内联if-else 表达式必须始终包含else子句,例如:
a = 1 if b else 0
如果你想让你的'a'变量值保持不变-使用旧的'a'值(否则仍然需要语法要求):
a = 1 if b else a
当b变为False时,这段代码保持一个不变。
你总是需要一个else在内联如果:
else
但是更简单的方法是使用a = int(b)。
a = int(b)
'else'语句是强制的。你可以这样做:
>>> b = True >>> a = 1 if b else None >>> a 1 >>> b = False >>> a = 1 if b else None >>> a >>>
编辑:
或者,根据你的需要,你可以尝试:
>>> if b: print(a)
对于你的情况,这是有效的:
a = b or 0
这是如何工作的?
在问题中
b = True
所以评估
b or 0
结果
它被分配给a。
a
如果b == False?, b or 0将计算为第二个操作数0,该操作数将分配给a。
b == False?
0
Python中不后面有if 声明。
if
Python中有两种类型的if:
if condition: statement if condition: block
if expression (introduced in Python 2.5)
expression_if_true if condition else expression_if_false
And note, that both print a and b = a are statements. Only the a part is an expression. So if you write
print a
b = 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语句写在一行上,尽管它的可读性较差,并且确实没有理由避免两行变体。
试试这个。这可能对你有帮助
a=100 b=True if b: print a
你为什么不简单地写:
if b: print a else: print 'b is false'
如果你不想使用from __future__ import print_function,你可以这样做:
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或使用python3或更高版本:
from __future__ import print_function a = False b = 100 print(b if a else "", end = "")
添加else是使代码语法正确所需要做的唯一更改,条件表达式需要else(“in line if else块”)
我没有使用None或0的原因,就像线程中其他人使用的那样,是因为使用None/0会导致程序在b是False的情况下变成print None或print 0。
None
None/0
b
False
print None
print 0
如果你想了解这个主题,我已经在这个功能添加到Python的补丁的发布说明中包含了链接。
上面的“模式”与PEP 308中显示的模式非常相似:
这个语法可能看起来很奇怪和落后;为什么会出现这种情况 在表达式的中间,而不是像C的C ?x y: ?方法应用新语法来检查该决策 模块的标准库,并查看如何产生的代码 阅读。在使用条件表达式的许多情况下,一个值 似乎是“常见情况”,一个值是“例外情况”, 仅在不符合条件的罕见情况下使用。的 条件语法使这个模式更加明显: Contents = ((doc + '\n') if doc else ")
Contents = ((doc + '\n') if doc else ")
所以我认为总的来说,这是一种合理的方法,但你不能否认它的简单性:
if logging: print data
你只是把事情复杂化了。
if b: print a
你可以使用:
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.
从2.5开始,你可以使用相当于C的“?”:“ 三元条件运算符,语法是:
[on_true] if [expression] else [on_false]
所以你的例子很好,但你必须简单地添加else,就像:
print a if b else ''
这可以使用字符串格式化完成。它适用于%符号以及.format ()和f-strings(3.6新增)
print '%s' % (a if b else "")
或
print '{}'.format(a if b else "")
print(f'{a if b else ""}')
嗯,你可以用列表理解。如果你有一个真正的范围,这才有意义。但它确实做到了:
print([a for i in range(0,1) if b])
或者只用这两个变量:
print([a for a in range(a,a+1) if b])
你可以这样写一个内联三元运算符:
sure = True # inline operator is_true = 'yes' if sure else 'no' # print the outcome print(is_true)
print a if b File "<stdin>", line 1 print a if b ^ SyntaxError: invalid syntax
回答
假设你的print语句在表达式为false时不输出任何内容,正确的语法是:
print
print(a if b else '')
(在我发布这个答案的时候,print已经演变成一个函数,现在需要括号。)
原因是if, 条件<强> < / >强表达,有两个强制子句,一个是在if之后b为真,一个是在else之后b为假。两个子句本身都是表达式。在你的代码中,else部分缺失了。条件表达式也被称为三元运算符,这表明它操作三个元素,一个条件和两个表达式。
详细信息:表达式与语句
不要将条件表达式与条件语句混合使用,它可以在没有else部分的情况下使用:
它不需要有else子句,其中提供了适当的附加指令。如果没有它,当条件为false时,测试后不再执行进一步的指令。
条件表达式为表达式。任何表达式都必须转换为最终值,无论后续语句(这里是print语句)是否使用该值。
例如,你可以这样使用if语句:
if b: print(a)
注意区别:
当条件为false时,if语句不会执行任何指令,不会打印任何内容。
请注意,您的另一次尝试print(a if b==True)与第一次尝试相同。
print(a if b==True)
b==True将首先计算并替换结果。由于b==True的逻辑值等于b,我猜Python只是忽略了这个计算,直接使用b,就像你第一次尝试的那样。
b==True