使用 if x is not None 还是if not x is None

原创
05/05 22:18
阅读数 23

前几天在写if判断时,突然很纠结是用if x is not None 还是if not x is None,哪个更加合理,性能有没差异,有没有坑,故意到网上详细查了一下,整理如下

代码中经常会有变量是否为None的判断,如:


第一种: if x is not None:

第二种: if not x is None:


它们之间是否存在某种轻微的性能差异呢?通过测试发现没有差异,因为它们编译后生成了相同的字节码:

import disdef a(x):    return x is not None
def b(x): return not x is None
dis.dis(a)dis.dis(b)

结论:

  1. 两种方式只是使用风格不同,但应尽量避免使用not x is None.尽管编译器总是将其视为not (x is None),但读者可能会误解为(not x) is None.

  2. if x is not None 清晰易懂,谷歌的风格指南和PEP-8都使用if x is not None


有些朋友可能会疑惑,为什么不用if x,因为在Python中:

None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False

因此原本你是想判断x是否为None但是却把None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()的情况也判断进来了


if x并不能精准的判断x是不是等于None, 处理不好就会出现BUG,所以建议在明确要判断x是否等于None时,使用if x is not None,其它根据情况使用,但在使用if x时,必须清楚x等于None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时,对你的判断没有影响

本文分享自微信公众号 - 彪哥的测试之路(gh_c1b79633c733)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部