Python如何确定将某些类型转换为什么类型?

时间:2016-07-05 19:54:36

标签: python casting comparison

假设我有以下内容:

x = "0"
y = 0
if x == y:
    print "You're winner!"

Python会将x转换为int,还是将y转换为字符串?有没有办法控制这种行为?

5 个答案:

答案 0 :(得分:5)

Python不会为你做任何类型转换。如果你想控制它,那么你应该是明确的。

请注意,仅仅因为python没有为您进行任何类型转换,各种对象可能。在这种情况下,所有的魔法都在__eq__int的{​​{1}}方法中。当python看到:

str

它会尝试:

a == b

如果返回a.__eq__(b) ,则会尝试NotImplemented。否则,将返回b.__eq__(a)的返回值并将其用作比较结果。显然有类似的" dunder"其他类型比较的方法(a.__eq__(b)__gt____lt__等。)

很少有内置对象可以与不同类型进行比较 - 实际上,我能想到的唯一内置对象是允许那些恶作剧的__le__int因为大多数人希望float1.0 == 1 ...

另请注意(对于相等),如果类型不匹配,大多数默认比较都会返回True。没有错误提出。对于其他更丰富的比较(例如False__lt__),结果实际上取决于版本。 Python2.x基于类型的订单。它保证了一致(但任意)的顺序。

__gt__

Python3.x做得更聪明,并通过提出Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> '1' > 1 True 来完全禁止它:

TypeError

答案 1 :(得分:1)

不会发生转换。 xy不相同,因为它们是不同的类型。如果要控制相等性测试,可以在对象上实现“魔术”__eq__方法。没有隐式转换功能。

答案 2 :(得分:1)

Python是一种强类型语言。除了涉及算术的float类型和int类型的一些例外,Python不会转换类型。

答案 3 :(得分:1)

它也不会转换;它只会决定他们不平等。

答案 4 :(得分:0)

是的,您可以执行以下操作: 1.将bool is_palindrome(const std::list<int>& l) //use templated version std::list<T> if needed { return std::equal(l.begin(), l.end(), l.rbegin()); } 投射到x

int
  1. x = "0" y = 0 if int(x) == y: print "You're winner!" 投射到y

    str