当0不是无或非假而是数字0时

2024-04-26 21:45:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的示例中,result将被分配给var2,因为var1是None:

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?你知道吗


Tags: or代码nonefalse编辑示例ifresult
1条回答
网友
1楼 · 发布于 2024-04-26 21:45:05

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

result = var1 if var1 is not None else var2

请记住,在Python中有很多错误:0、False、None、''、空序列、空映射以及以某种方式设置了__nonzero____len__的类实例。你知道吗

上面的代码允许除None之外的所有东西给你var1。相应调整。你知道吗

附录

例如,在Ruby中,只有nilfalse是falsy。假设您希望在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。你知道吗

相关问题 更多 >