在开始之前感谢各位的关注和留言,这也增加了持续更新的动力。因本人目前用python略多些,所以发的和python相关的内容会多些。当然如果有同学想了解其它方面的内容(例如iOS、Android、Java或者其它等方向都可以留言)也可以给我留言,我会不定期更新相关内容。废话不多说了,在Python中is 和 == 这两个运算符经常会让新手栽跟头,一个不小心搞混,可能会让你决定明明相等却返回False。我们先看看二者的区别, == 检查目标的值是否相等,也就是两个东西长得是不一样;而is则是用来判断身份,两个东西是否为同一个对象。看个简单例子:a = [1, 2, 3]b = [1, 2, 3]print(a == b) # True 内容完全相同print(a is b) # False 不是同一个对象
a 和 b 是独立的,在不同的内存地址,因此不是同一个对象。但是它们的内容完全相同。再来看个缓存API响应的错误写法:cached_result = Nonedef get_data(): global cached_result if cached_result is []: # 大错特错! return cached_result # 下面是获取数据的逻辑...
这个判断永远不会成立,因为每次写[],python都会创建一个新的列表对象,哪怕cached_result是空列表,它和[]也不是同一个对象。正确的做法是实用==,或者直接判断是否为空:if cached_result == []: # 或者更简洁的写法if not cached_result:
可以记住这句话“判断None用is,其它情况用==”# 判断None,必须用isif result is None: print("数据为空")# 判断普通值相等,用==if user_input == "quit": break# 比较列表/字典内容,用==if current_list == expected_list: print("匹配成功!")
为什么判断None必须用is?在整个python运行时中,只有一个None对象,无论你在哪里写None,都指向同一个对象。1.用is比较字符串/数字,虽然偶尔能碰巧生效,但是不可靠,千万别大意2.用is比较列表/字典 基本上是bug,列表和字典是可变对象3.忘记is not的写法,例如判断不是None,要写if x is not None 而不是if not x is None4.默认is 和==通用,它们逻辑不同,前者比后者严格的多。