在PHP中,您使用===
表示法来测试与TRUE
或FALSE
不同的1
或0
。
例如if FALSE == 0
返回TRUE
,if FALSE === 0
返回FALSE
。因此,当在基数0中进行字符串搜索时,如果所讨论的子字符串的位置在开头是正确的,那么PHP 0
可以区分FALSE
。
有没有办法在Python中执行此操作?
答案 0 :(得分:16)
在Python中,
is
运算符测试身份(False is False
,0 is not False
)。
==
运算符,用于测试逻辑相等性(因此0 == False
)。
从技术上讲,这些都不完全等同于PHP的===
,它比较了Python中的逻辑相等和类型,而且是a == b and type(a) is type(b)
。
is
和==
之间的其他一些差异:
{} == {}
,但是{} is not {}
(对于列表和其他可变类型也是如此)a = {}
,那么a is a
(因为在这种情况下,它是对同一个实例的引用)"a"*255 is not "a"*255"
,但在大多数实现中都是"a"*20 is "a"*20
,因为Python处理字符串实习。但是,这种行为并不能得到保证,在这种情况下你可能不应该使用is
。 "a"*255 == "a"*255
并且几乎总是正确使用比较。12345 is 12345
但在大多数实现中12345 is not 12345 + 1 - 1
同样如此。您几乎总是希望在这些情况下使用相等。答案 1 :(得分:4)
if something is False:
是你应该做的
if something is None:
也有效
道德是使用is
...(虽然你应该永远做something is 123457
,或者simillar)
为什么你永远不应该使用整数和事情来看http://ideone.com/iKmWCn
答案 2 :(得分:0)
Python中x === y
的严格等价物为type(x) is type(y) and x == y
。你不是真的想这样做,因为Python是鸭子类型。如果一个对象具有适当的方法或属性,那么你不应该太担心它的实际类型。
如果要检查特定的唯一对象,例如(True
,False
,None
或类),则应使用is
和{{1 }}。例如:is not
。