在下面的示例中,result
将被分配到var2
,因为var1
为无:
var1=None
var2='June'
result=var1 or var2
但如果var1
为零result
仍然分配给var2
,因为零被认为与None
或False
相同:
var1=0
var2='June'
result=var1 or var2
如何(不使用if var1!=None
)编辑此代码以确保var1
被认为是"有效"(非无,不是假),即使其值为零0
?
答案 0 :(得分:5)
虽然or
看起来很漂亮,但看起来你可能想要这样做:
result = var1 if var1 is not None else var2
请记住,在Python中有很多东西是假的:0,False,None,'',空序列,空映射,以及__nonzero__
和__len__
的类实例设置一定的方式。
上面的代码允许除 None
之外的所有内容都为您提供var1
。相应调整。
<强>附录强>
例如,在Ruby中,只有nil
和false
是假的。假设您想在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。