假设我有以下内容:
x = "0"
y = 0
if x == y:
print "You're winner!"
Python会将x
转换为int,还是将y
转换为字符串?有没有办法控制这种行为?
答案 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
因为大多数人希望float
为1.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)
不会发生转换。 x
和y
不相同,因为它们是不同的类型。如果要控制相等性测试,可以在对象上实现“魔术”__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
将x = "0"
y = 0
if int(x) == y:
print "You're winner!"
投射到y
:
str