当零不是None或不是False而是数字0时

时间:2014-06-09 04:47:45

标签: python

在下面的示例中,result将被分配到var2,因为var1为无:

var1=None
var2='June'
result=var1 or var2

但如果var1为零result仍然分配给var2,因为零被认为与NoneFalse相同:

var1=0
var2='June'
result=var1 or var2

如何(不使用if var1!=None)编辑此代码以确保var1被认为是"有效"(非无,不是假),即使其值为零0

1 个答案:

答案 0 :(得分:5)

虽然or看起来很漂亮,但看起来你可能想要这样做:

result = var1 if var1 is not None else var2

请记住,在Python中有很多东西是假的:0,False,None,'',空序列,空映射,以及__nonzero____len__的类实例设置一定的方式。

上面的代码允许 None之外的所有内容都为您提供var1。相应调整。

<强>附录

例如,在Ruby中,只有nilfalse是假的。假设您想在Python中复制此行为。你可以写:

result = var1 if var1 is not None and var1 is not False else var2

但是,这是一个警告。不要写:

result = var1 if var1 not in [None,False] else var2  # FAIL! DOES NOT WORK!!!!!!

为什么呢?因为,至少在Python 2中:

>>> 0 is None
False
>>> 0 is False
False
>>> 0 in [None,False]
True
>>> 0 in [False]
True
>>> 0 == None
False
>>> 0 == False
True

很高兴知道,特别是如果从Ruby转向Python。