Python:什么是PHP“==”的等价物

时间:2014-04-27 12:08:34

标签: php python comparison-operators language-comparisons

问题是这样说的。

这是一个小解释。

在PHP中。 “==”就像这样工作

2=="2" (Notice different type)
// True

在python中:

2=="2"
// False
2==2
// True

php中python“==”的等价物是“===”

2===2
//True
2==="2"
//False

百万美元的问题。什么是php“==”等同于python?

8 个答案:

答案 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内部使用的相关类型,以便进行明确指定的类型强制。