2016-04-28 52 views
0

实施例:零assignement以串联比较

>>> x = 10 
>>> x = x > 9 and 0 or x 
>>> x 
10 

而:

>>> x = 10 
>>> x = x > 9 and 1 or x 
>>> x 
1 

显然0被视为布尔假。如何使用内联比较来分配整数0?

+0

你能指定你想要的结果吗? –

+0

如果数字大于9,我想要0 0 – vedar

+0

如果它不大于9,你想要什么? – AKS

回答

2

你可能想这

x= 0 if x > 9 else x 

这是用C语言一样三元传统运营商的蟒蛇方式。

x = x > 9 and 0 or x 

这被解释为

x = (x > 9 and 0) or x 
x = 0 or x 
x = x 

另一个版本

x = x > 9 and 1 or x 

是:

,你必须总是会给x或1 x> 9的代码片段解释为

x = (x > 9 and 1) or x 
x = 1 or x # or gets short-circuited so second expression is not evaluated 
x = 1 
+0

为了好玩,这似乎也工作得很好:'x = int(x> 9和'0'或x)',虽然当然是更糟糕的解决方案 – vedar

2

试试这个:

x = 0 if x > 9 else x