问题是这样说的。
这是一个小解释。
在PHP中。 “==”就像这样工作
2=="2" (Notice different type)
// True
在python中:
2=="2"
// False
2==2
// True
php中python“==”的等价物是“===”
2===2
//True
2==="2"
//False
百万美元的问题。什么是php“==”等同于python?
答案 0 :(得分:6)
Python并不像PHP那样强制进行类型,主要是。
您必须明确地执行此操作:
2 == int('2')
或
str(2) == '2'
Python强制使用数字类型(您可以将浮点数与整数进行比较),Python 2也会在Unicode和字节字符串类型之间自动转换(令许多人感到懊恼)。
答案 1 :(得分:5)
没有一个。您需要在检查相等性之前转换类型。在您的示例中,您可以执行
2==int("2")
答案 2 :(得分:1)
没有等价物。
不同之处在于Python是强类型的,而PHP则不然,因此Python中两种类型之间的比较总是返回false。除非你明确地转换为比较的其他部分的类型当然。
答案 3 :(得分:1)
你也可以
str(2) == "2"
答案 4 :(得分:0)
所以这里相当于php' s ==
def php_cmp(a, b):
if a is None and isinstance(b, basestring):
a = ""
elif b is None and isinstance(a, basestring):
b = ""
if a in (None, False, True) or b in (None, False, True):
return bool(a) - bool(b)
if isinstance(a, (basestring, int, long, float)) and isinstance(b, (basestring, int, long, float)):
try:
return cmp(float(a), float(b))
except ValueError:
return cmp(a,b)
if isinstance(a, (tuple,list)) and isinstance(b, (tuple,list)):
if len(a) != len(b):
return cmp(len(a),len(b))
return cmp(a,b)
if isinstance(a, dict) and isinstance(b, dict):
if len(a) != len(b):
return cmp(len(a),len(b))
for key in a:
if key not in b:
raise AssertionError('not compareable')
r = cmp(a[key], b[key])
if r: return r
return 0
if isinstance(a, (basestring, int, long, float)):
return 1
if isinstance(b, (basestring, int, long, float)):
return -1
return cmp(a,b)
def php_equal(a, b):
return php_cmp(a,b) == 0
测试:
>>> php_equal(2, '2')
True
由于不同的对象模型和数组实现,这不是100%正确,但应该让您知道自动转换类型可能会出现哪些问题进行比较。
答案 5 :(得分:0)
可能是类似的东西:
x = 5
y = "5"
str(x) == str(y)
True
str(2) == str("2")
True
答案 6 :(得分:0)
可以给你的最佳答案是避免类似PHP的比较。无论如何,它会导致您难以找到错误和花在调试上的时间。
但如果你想用Python编写自己的PHP解释器,那也没关系。
您可能希望先输出变量并在之后进行比较。如果您在编译时编程失败,则会在早期遇到错误,从而防止进一步损坏。
答案 7 :(得分:0)
作为Martijn's answer的附加组件……由于Python不像PHP那样执行隐式类型强制,因此可以使用:
type(2)
或
type("2")
或
type(<expression>)
如果您需要了解Python内部使用的相关类型,以便进行明确指定的类型强制。