if
我今天在 python 子句中遇到了意想不到的结果:
import numpy
if numpy.allclose(6.0, 6.1, rtol=0, atol=0.5):
print 'close enough' # works as expected (prints message)
if numpy.allclose(6.0, 6.1, rtol=0, atol=0.5) is True:
print 'close enough' # does NOT work as expected (prints nothing)
经过一番摸索(即这个问题,特别是这个答案),我明白了原因:type
返回的numpy.allclose()
不是numpy.bool_
普通的 old bool
,显然 if foo = numpy.bool_(1)
, thenif foo
将评估为True
whileif foo is True
将评估为False
。这似乎是is
操作员的工作。
我的问题是:为什么 numpy 有自己的布尔类型,鉴于这种情况,最佳实践是什么?在上面的示例中,我可以通过编写if foo:
来获得预期的行为,但我更喜欢更严格的,因为它排除了和return之if foo is True:
类的东西,有时显式类型检查是可取的。2
[2]
True