2
考虑下面的代码:Python如何将字符串与整数进行比较?
a = '1'
if a == 1:
print 'yes'
else:
print 'no'
我们得到输出no
。
Python如何将字符串值与int进行比较(if a == 1
)?在C中,这样的比较会给出错误,因为这是比较不同的类型。
考虑下面的代码:Python如何将字符串与整数进行比较?
a = '1'
if a == 1:
print 'yes'
else:
print 'no'
我们得到输出no
。
Python如何将字符串值与int进行比较(if a == 1
)?在C中,这样的比较会给出错误,因为这是比较不同的类型。
Python不是C.与C不同,Python支持任意类型之间的平等测试。
这里没有'如何',字符串不支持对整数进行平等测试,整数不支持对字符串进行平等测试。所以Python会回到默认的身份测试行为,但对象是不是同一个对象,所以结果是False
。
参见参考文档的Value comparisons section:
是否相等的比较(
==
和!=
)的默认行为是基于所述对象的身份。因此,具有相同身份的实例的平等比较导致平等,并且具有不同身份的实例的平等比较导致不平等。这种默认行为的动机是希望所有对象都应该具有反身性(即x is y
意味着x == y
)。
如果要将整数与包含数字的字符串进行比较,则需要将字符串转换为整数或整数,然后进行比较。
出于好奇,这与其他有强制类型的行为有什么区别: '3 is 3.0 == False' but'(3 == 3.0)== True'(我不建议字符串应该被强制,但我更多地询问引用中的最后一句) – brianpck
@brianpck:这是一个*链式比较*,与'3是3.0和3.0 == False'是一样的。第一个表达式是**不是与第二个表达式相同。 –
@brianpck:看[为什么表达式0 <0 == 0在Python中返回False?](// stackoverflow.com/q/6074018) –