【发布时间】:2018-04-30 15:34:22
【问题描述】:
首先我们有这个:
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
尽管编写正确的版本几乎足够直观,但我无法向自己解释第一个版本失败的原因。
所以问题是,为什么第一个版本失败了?
【问题讨论】:
-
另请注意,“工作”版本应为
a in [None, "*"]。如您所写,(None or "*")被评估为布尔表达式,它将返回第一个True等效组件,即"*"。然后你的代码将测试a is "*"。试试some(None)看看我的意思。 -
@MatthiasFripp 感谢您的注意,我确实错过了那部分,它应该放在方括号中。
标签: python if-statement logical-operators