5

问题说了算。

这里有一点解释。

在 PHP 中。"==" 像这样工作

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

在 python 中:

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

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

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

百万美元的问题。php“==”相当于python中的什么?

4

8 回答 8

6

Python 不像 PHP 那样在类型之间进行强制转换,主要是.

你必须明确地这样做:

2 == int('2')

或者

str(2) == '2'

Python 强制数字类型(您可以将浮点数与整数进行比较),并且 Python 2 还可以在 Unicode 和字节字符串类型之间自动转换(让许多人感到懊恼)。

于 2014-04-27T12:11:45.617 回答
5

没有一个。您需要在检查相等性之前转换类型。在你的例子中,你可以做

2==int("2")
于 2014-04-27T12:11:31.600 回答
1

没有等价物。

区别只是 Python 是强类型的,而 PHP 不是,所以 Python 中两种类型之间的比较总是返回 false。除非你明确地将类型转换为其他部分的比较当然。

于 2014-04-27T12:13:17.667 回答
1

你也可以有

str(2) == "2"
于 2014-04-27T12:13:54.177 回答
0

可能是类似的东西:

x = 5
y = "5"

str(x) == str(y)
True

str(2) == str("2")
True
于 2014-04-27T15:51:30.260 回答
0

可以给您的最佳答案是避免类似 PHP 的比较。无论如何,它会导致您难以发现错误并花费大量时间进行调试。

但是如果你想用 Python 编写你自己的 PHP 解释器也没关系。

您可能想先转换变量,然后再比较它们。如果你的程序在投射时失败,你会更早地遇到错误,防止进一步的损坏。

于 2014-04-28T19:20:45.537 回答
0

所以这里相当于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% 正确的,但应该让您了解自动转换类型以进行比较时可能会出现哪些问题。

于 2014-04-27T12:18:19.853 回答
0

附加说明

作为Martijn 答案的附加组件......由于 Python 不像 PHP 那样进行隐式类型强制,您可以使用:

 type(2)

或者

 type("2") 

或者

  type(<expression>)

如果您需要知道 Python 内部使用的相关类型,以便进行明确指定的类型强制。

于 2019-03-22T22:49:52.143 回答