1. 程式人生 > >python裡None 表示False嗎? (我是新手)

python裡None 表示False嗎? (我是新手)

https://www.zhihu.com/question/48707732

作者:靈劍
連結:https://www.zhihu.com/question/48707732/answer/112233903
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

這個其實在Python文件當中有寫了,為了準確起見,我們先引用Python文件當中的原文:
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。大致是這樣:
  1. 布林型,False表示False,其他為True
  2. 整數和浮點數,0表示False,其他為True
  3. 字串和類字串型別(包括bytes和unicode),空字串表示False,其他為True
  4. 序列型別(包括tuple,list,dict,set等),空表示False,非空表示True
  5. None永遠表示False

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

  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或者為空。

所以準確來說,你的這句

state = states.get'texas' None
if not state:
    ....

其實對應的是

if 'texas' not in states or states['texas'] is None or not states['texas']:
    ...

它有三種成立的情況:

  1. dict中不存在
  2. dict中存在,但值是None
  3. dict中存在而且也不是None,但是是一個等同於False的值,比如說空字串或者空列表。

相關推薦

pythonNone 表示False新手

https://www.zhihu.com/question/48707732 作者:靈劍 連結:https://www.zhihu.com/question/48707732/answer/112233903 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,

python設置統一編碼格式適合新手

Python編碼 utf-b 中文亂碼 python 作為一種高級語言,自身有許多的編碼。很多新手在剛開始編程時會遇到中文亂碼的情況,如下面截圖 怎樣解決這個問題呢?其實很簡單,在第一行定義編碼格式為UTF-8就可以了。即在第一行輸入代碼:# --coding: utf-8 -- 。如下圖:

python的魔法方法1構造與析構

魔法方法——構造與析構 1、python程式設計的魔法方法: (1)魔法方法總是被雙下劃線包圍,例如__init__; (2)魔法方法是面向物件的python的一切。 2、__new__(class[,…])魔法方法 主要用來重新修改和對於實際類()裡面所帶引數的修改,__new__ 方法主要任務是

python自動化學習筆記-第一篇介面測試

學習的介面測試工具postman、jmeter 在介面測試之前,我們要獲得介面文件。介面文件會告訴我們: url 請求方式 請求引數 引數的說明 url即要訪問的連結、地址 請求方式指。。。有直接向伺服器獲取資料的請求方式(get)。有的要輸入一些資料,才能向伺服器獲取資料(post),

Python裡面None True False之間的區別

None雖然跟True False一樣都是布林值。 雖然None不表示任何資料,但卻具有很重要的作用。 它和False之間的區別還是很大的! 例子: >>> t = None >>> if t: ... print("something") ..

python selenium-webdriver 通過cookie登陸十一

circle gin == items tail login lis code 技術 上節介紹了瀏覽器的常用方法,涉及到了cookie的使用,本節介紹一下如何利用cookie進行登陸系統,這裏使用到了request模塊,我們首先利用request模塊,請求登陸地址進行登陸,

詳解Python中的生成器表達式generator expression

新元素 括號 tuple 列表推導式 特點 解析式 表達式 但是 bracket      介紹     1、生成器表達式(generator expression)也叫生成器推導式或生成器解析式,用法與列表推導式非常相似,在形式上生成器推導式使用圓括號(parenth

開啟Python取經之路-CLASS-6Part 1

int code 中標 cnblogs 環境 執行 變量 spa -c 第一個python程序 HELLO WORLD 1 print("hello world") 單行註釋:# 多行註釋:‘‘‘....‘‘‘或者"""....""" 在linux編程中,要在程序中

python學習第十四節正則

image all flags 正則 asdf alt afa images lag python2和python3都有兩種字符串類型strbytes re模塊find一類的函數都是精確查找。字符串是模糊匹配 findall(pattern,string,flags) r

Python爬蟲從入門到放棄十一之 Scrapy框架整體的一個了解

object 定義 roc encoding eth obi pipe pos 等等 這裏是通過爬取伯樂在線的全部文章為例子,讓自己先對scrapy進行一個整理的理解 該例子中的詳細代碼會放到我的github地址:https://github.com/pythonsite/

Python爬蟲從入門到放棄十八之 Scrapy爬取所有知乎用戶信息(上)

user 說過 -c convert 方式 bsp 配置文件 https 爬蟲 爬取的思路 首先我們應該找到一個賬號,這個賬號被關註的人和關註的人都相對比較多的,就是下圖中金字塔頂端的人,然後通過爬取這個賬號的信息後,再爬取他關註的人和被關註的人的賬號信息,然後爬取被關註人

Python自學筆記-paramiko模塊Mr serven

連接 上傳下載 obj 1.4 blog () col iss bsp 文章出處:http://www.cnblogs.com/wupeiqi/articles/5095821.html SSHClient 用於連接遠程服務器並執行基本命令 基於用戶名密碼連接: #!/u

python函數第5天day 24

eat style python 通過 返回 for end 位置 sta 可叠代的:對象下有__iter__方法的都是可叠代的對象 叠代器:對象.__iter__()得到的結果就是叠代器 叠代器的特性: 叠代器.__next__() 取下一個值

python函數第6天day 25

但是 encoding 類型 list函數 對象 item import cal bool 內置 函數: # print(abs(-1)) # print(abs(0)) # # # print(all(‘ ‘)) # print(all((1,‘ ‘,2,None)))

python-實現3級菜單作業課

大頁 max 退出 廣州 += 2級菜單 span -- 顯示 1 #任務: 2 #顯示3級菜單 3 #1級菜單#顯示 3個城市 => 1北京 2上海 3廣州 4 #2級菜單 #顯示 選擇1 北京 => B1 B2 B3 5 #2級菜單 #顯示

Selenium2+python自動化23-富文本自動發帖【轉載】

成功 正文 地址 sel 代碼 登錄 post ges appdata 前言 富文本編輯框是做web自動化最常見的場景,有很多小夥伴遇到了不知道無從下手,本篇以博客園的編輯器為例,解決如何定位富文本,輸入文本內容 一、加載配置 1.打開博客園寫隨筆,首先需

python學習_day69_django入門項目老師表

兩個 exit 關閉 python學習 one result utf8 row 入門 一、模板語言    二、多選框後端取值   後端取值方式如下: 三、ajax發數據方式   1、正常情況: 前端發數據: 後端處理數據:   2、非正常情況: 前端發數據: 後端

python 入坑路--裝飾器語法糖--高高潮

wrapper else clas inpu 參數 index word com oca 上回我們說到,傳入的函數帶參數,這回我們要說的是,裝飾器帶參數,那麽裝飾器要如何是好。 1 u_n="keven" 2 passwd="abc123" 3 4 def au

python 闖關之路一語法基礎

英文 下劃線 .... 保存數據 bject 分用 alex 否則 變化 1,什麽是編程?為什麽要編程?   答:編程是個動詞,編程就等於寫代碼,那麽寫代碼是為了什麽呢?也就是為什麽要編程呢,肯定是為了讓計算機幫我們搞事情,代碼就是計算機能理解的語言。 2,編程語言進化史是

Python之初始面向對象3--5

修改 面向 import agg 引用 結果 打了 人物 元組 面向過程 VS 面向對象 : 面向過程的優缺點: 優點是:極大的降低了寫程序的復雜度,只需要 順著要執行的步驟,堆疊代碼即可。 缺點是:一套流水線或者流程就是用來解決一個問題,代碼牽一發而動全身。 面向對象的優