问题说了算。
这里有一点解释。
在 PHP 中。"==" 像这样工作
2=="2" (Notice different type)
// True
在 python 中:
2=="2"
// False
2==2
// True
php中python“==”的等价物是“===”
2===2
//True
2==="2"
//False
百万美元的问题。php“==”相当于python中的什么?
问题说了算。
这里有一点解释。
在 PHP 中。"==" 像这样工作
2=="2" (Notice different type)
// True
在 python 中:
2=="2"
// False
2==2
// True
php中python“==”的等价物是“===”
2===2
//True
2==="2"
//False
百万美元的问题。php“==”相当于python中的什么?
Python 不像 PHP 那样在类型之间进行强制转换,主要是.
你必须明确地这样做:
2 == int('2')
或者
str(2) == '2'
Python 强制数字类型(您可以将浮点数与整数进行比较),并且 Python 2 还可以在 Unicode 和字节字符串类型之间自动转换(让许多人感到懊恼)。
没有一个。您需要在检查相等性之前转换类型。在你的例子中,你可以做
2==int("2")
没有等价物。
区别只是 Python 是强类型的,而 PHP 不是,所以 Python 中两种类型之间的比较总是返回 false。除非你明确地将类型转换为其他部分的比较当然。
你也可以有
str(2) == "2"
可能是类似的东西:
x = 5
y = "5"
str(x) == str(y)
True
str(2) == str("2")
True
可以给您的最佳答案是避免类似 PHP 的比较。无论如何,它会导致您难以发现错误并花费大量时间进行调试。
但是如果你想用 Python 编写你自己的 PHP 解释器也没关系。
您可能想先转换变量,然后再比较它们。如果你的程序在投射时失败,你会更早地遇到错误,防止进一步的损坏。
所以这里相当于php的==
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% 正确的,但应该让您了解自动转换类型以进行比较时可能会出现哪些问题。
作为Martijn 答案的附加组件......由于 Python 不像 PHP 那样进行隐式类型强制,您可以使用:
type(2)
或者
type("2")
或者
type(<expression>)
如果您需要知道 Python 内部使用的相关类型,以便进行明确指定的类型强制。