if 语句中的一个或另一个
one or the other in if statement
首先我们有这个:
def some(a):
if a is None or "*":
print "*"
else:
print a
>>> some("*")
*
>>> some("d")
*
它失败了,但我无法给自己一个足够好的理由来说明它失败了。
显然是因为我写错了,一个有效的版本是:
def some(a):
if a in [None, "*"]: # or write [ if a is None or a is "*" ]
print "*"
else:
print a
>>> some("*")
*
>>> some("d")
d
虽然写出正确的版本几乎足够直观,但我无法向自己解释为什么第一个版本失败了。
那么问题来了,为什么第一个版本失败了?
这将始终评估为 True
if a is None or "*":
如果你愿意,你可以这么说
if a is None or a== "*":
以下语句不符合您的预期:
if a is None or "*":
这相当于:
if (a is None) or "*":
所以总是 True
。要获得您想要的行为,请使用:
if a is None or a == "*":
声明:
if a is None or "*":
语义上的意思是
if ((a is None) is True) or (the value "*" is True)
作为非空字符串的值 "*"
总是 True
。因此,整个表达式的计算结果为 True
.
首先我们有这个:
def some(a):
if a is None or "*":
print "*"
else:
print a
>>> some("*")
*
>>> some("d")
*
它失败了,但我无法给自己一个足够好的理由来说明它失败了。 显然是因为我写错了,一个有效的版本是:
def some(a):
if a in [None, "*"]: # or write [ if a is None or a is "*" ]
print "*"
else:
print a
>>> some("*")
*
>>> some("d")
d
虽然写出正确的版本几乎足够直观,但我无法向自己解释为什么第一个版本失败了。
那么问题来了,为什么第一个版本失败了?
这将始终评估为 True
if a is None or "*":
如果你愿意,你可以这么说
if a is None or a== "*":
以下语句不符合您的预期:
if a is None or "*":
这相当于:
if (a is None) or "*":
所以总是 True
。要获得您想要的行为,请使用:
if a is None or a == "*":
声明:
if a is None or "*":
语义上的意思是
if ((a is None) is True) or (the value "*" is True)
作为非空字符串的值 "*"
总是 True
。因此,整个表达式的计算结果为 True
.