只有当布尔变量设置为 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
也是一样。
我在这里想念什么?
lambda
中有效,但 not 是单行语句。
Python 确实不有一个尾随的if
语句。
Python中有两种if
:
if 语句:if 条件:语句 if 条件:阻塞 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
语句写在一行上,尽管它的可读性较差,并且确实没有理由避免使用两行变体。
内联 if-else EXPRESSION 必须始终包含 else 子句,例如:
a = 1 if b else 0
如果你想保持你的'a'变量值不变 - 评估旧的'a'值(否则语法要求仍然需要):
a = 1 if b else a
当 b 变为 False 时,这段代码保持 a 不变。
print a if b
else a
会比 else 0
更好
if b: print a
在这种情况下只需要一个简单的 if
""
或 None
的内容,请参阅详细信息在其他答案中)。
'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 是使代码语法正确所需的唯一更改,条件表达式需要 else (“inline if else 块”)
我没有像线程中其他人那样使用 None
或 0
的原因是,在 b
为 {7 的情况下,使用 None/0
会导致程序为 print None
或 print 0
}。
如果您想阅读有关此主题的信息,我在发行说明中包含了一个 link,以说明此功能已添加到 Python 中。
上面的“模式”与 PEP 308 中显示的模式非常相似:
这种语法可能看起来很奇怪和倒退;为什么条件出现在表达式的中间,而不是像 C 的 c 那样在前面? x:是吗?通过将新语法应用于标准库中的模块并查看生成的代码如何读取来检查该决定。在许多使用条件表达式的情况下,一个值似乎是“常见情况”,一个值是“例外情况”,仅在不满足条件的极少数情况下使用。条件语法使这种模式更加明显: contents = ((doc + '\n') if doc else '')
所以我认为总的来说这是一种合理的方法,但你不能与以下简单性争论:
if logging: print data
print ""
仍然会打印一些东西:一个空行。
print
中的 end
参数只出现在 Python 3.x 中,对吗?
from __future__ import print_function
这可以通过 string formatting 完成。它适用于 % 符号以及 .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 if b else ""
。这正是 Noelkd 的回答所做的。
print "",
(冒号)和对于 Python3 使用 print("", end="")
可以避免这种情况。
从 2.5 开始,您可以使用 equivalent of C’s ”?:” ternary conditional operator ,语法为:
[on_true] if [expression] else [on_false]
因此,您的示例很好,但您只需添加 else
,例如:
print a if b else ''
print ''
仍将打印换行符,Noelkd 的答案中避免了这一点。
您可以像这样编写内联三元运算符:
sure = True
# inline operator
is_true = 'yes' if sure else 'no'
# print the outcome
print(is_true)
您可以使用:
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.
对于您的情况,这有效:
a = b or 0
编辑:这是如何工作的?
在问题中
b = True
所以评价
b or 0
结果是
True
分配给 a
。
如果是 b == False?
,则 b or 0
将计算为将分配给 a
的第二个操作数 0
。
尝试这个 。它可能会帮助你
a=100
b=True
if b:
print a
你只是过于复杂了。
if b:
print a
if DEBUG: print something
在以下情况下,您始终需要在内联中使用 else
:
a = 1 if b else 0
但更简单的方法是 a = int(b)
。
a = int(bool(b))
。
嗯,你可以用列表理解来做到这一点。这只有在你有一个真正的范围时才有意义..但它确实可以完成这项工作:
print([a for i in range(0,1) if b])
或仅使用这两个变量:
print([a for a in range(a,a+1) if b])
那么你为什么不简单地写:
if b:
print a
else:
print 'b is false'
不定期副业成功案例分享
if condition: statement
在多行语句的情况下不起作用。if
,那么为什么会这样:print [i for i in range(10) if i%2]
?我希望他们允许它超出理解范围......for
。