Python之False和None

這個其實在Python文檔當中有寫了,爲了準確起見,咱們先引用Python文檔當中的原文:html

In the context of Boolean operations, and also when expressions are used bycontrol flow statements, the following values are interpreted as false:False, None, numeric zero of all types, and empty strings and containers(including strings, tuples, lists, dictionaries, sets and frozensets). Allother values are interpreted as true. (See the  __nonzero__()special method for a way to change this.)


進行邏輯判斷(好比if)時,Python當中等於False的值並不僅有False一個,它也有一套規則。對於基本類型來講,基本上每一個類型都存在一個值會被斷定爲False。大體是這樣:python

  1. 布爾型,False表示False,其餘爲True
  2. 整數和浮點數,0表示False,其餘爲True
  3. 字符串和類字符串類型(包括bytes和unicode),空字符串表示False,其餘爲True
  4. 序列類型(包括tuple,list,dict,set等),空表示False,非空表示True
  5. None永遠表示False

自定義類型則服從下面的規則:express

  1. 若是定義了__nonzero__()方法,會調用這個方法,並按照返回值判斷這個對象等價於True仍是False
  2. 若是沒有定義__nonzero__方法但定義了__len__方法,會調用__len__方法,當返回0時爲False,不然爲True(這樣就跟內置類型爲空時對應False相同了)
  3. 若是都沒有定義,全部的對象都是True,只有None對應False

 

因此回到問題,not None的確會返回True。不過必定要警戒的是,if a is None和if a,if a is not None和if not a不能夠隨便混用,前面也說過了,它們在不少時候是不一樣的,好比說當a是一個列表的時候if not a實際上是判斷a爲None或者爲空。this

相關文章
相關標籤/搜索