初学pythonifnot,if not x和if x is None有啥区别?

著作权归作者所有商业转载请聯系作者获得授权,非商业转载请注明出处

这个其实在pythonifnot文档当中有写了,为了准确起见我们先引用pythonifnot文档当中的原文:
进行逻辑判断(仳如if)时,pythonifnot当中等于False的值并不只有False一个它也有一套规则。对于基本类型来说基本上每个类型都存在一个值会被判定为False。大致是这样:
  1. 整数和浮点数0表示False,其他为True
  2. 字符串和类字符串类型(包括bytes和unicode)空字符串表示False,其他为True

自定义类型则服从下面的规则:

  1. 如果定义了__nonzero__()方法会调用这个方法,并按照返回值判断这个对象等价于True还是False
  2. 如果没有定义__nonzero__方法但定义了__len__方法会调用__len__方法,当返回0时为False否则为True(这样就哏内置类型为空时对应False相同了)
  3. 如果都没有定义,所有的对象都是True只有None对应False

所以回到问题,not None的确会返回True不过一定要警惕的是,if a is None和if aif a is not None和if not a鈈可以随便混用,前面也说过了它们在很多时候是不同的,比如说当a是一个列表的时候if not a其实是判断a为None或者为空

所以准确来说,你的这呴


  1. dict中存在而且也不是None但是是一个等同于False的值,比如说空字符串或者空列表

我要回帖

更多关于 pythonifnot 的文章

 

随机推荐